Skip to content

What we check before an app is listed

Every app in SplashSend's Apps store made by somebody else is checked by a person first, against the list below. Your app's page in SplashSend runs the automated checks for you before you send it, and you agree to the Terms for app makers there too. An app that changes its name, its permissions or where it sends people back to is checked again.

  1. Its maker agreed to the Terms for app makers

    The current Terms for app makers were agreed on the app's page.

    We check this automatically.

  2. It asks only for what it uses

    Each permission has a reason in the app's details, and the app uses every one it asks for. It asks for people's other details only if it shows or uses them.

    We check this automatically, and a person checks it by trying your app.

  3. Its privacy policy covers SplashSend data

    The policy opens, and it says what the app does with account data, how long it keeps it and how to ask for it to be erased.

    We check this automatically, and a person checks it by trying your app.

  4. It takes privacy notices

    Its notices address answers a signed test notice with a 2xx status, and the app erases what it is told to within 30 days.

    We check this automatically, and a person checks it by trying your app.

  5. Installing it works

    Its install address leads to SplashSend's allow screen, people come back to an https address it registered, and it does what it says once allowed.

    We check this automatically, and a person checks it by trying your app.

  6. It respects consent

    It never emails people who haven't agreed, never subscribes anyone again after they unsubscribed, and doesn't get round SplashSend's checks.

    A person checks this by trying your app.

  7. The account decides what is sent

    If it sends campaigns, the account chooses what goes and who it goes to.

    A person checks this by trying your app.

  8. It keeps secrets on its server

    No client secret, notices secret or token appears in a web page or an app people download, and it uses https throughout.

    A person checks this by trying your app.

  9. Its listing is honest, and it's free to connect

    Its name, description and pictures say what it does. SplashSend's name and logo aren't in its name, and nothing suggests we made it. It's free to install and use with SplashSend, and if it needs a paid service of its maker's, the listing says so.

    A person checks this by trying your app.

  10. It has support that answers

    Its support email is answered. Accounts see it on the allow screen.

    We check this automatically, and a person checks it by trying your app.

  11. Removing it is clean

    When an account removes it, it stops using that account's data, and it erases that data when the account.erased notice comes.

    A person checks this by trying your app.

Privacy notices

When a person is erased, when an account removes your app or closes, and when a person asks an account for their data, we send a notice to the https address you give on your app's page. Each is a POST with a JSON body. Check the X-SplashSend-Signature header: it is the hex HMAC-SHA256 of the raw body, made with the notices secret shown on your app's page. Answer with a 2xx status as soon as it arrives. A notice that isn't taken is tried again for about six days. id is the same on every try, so you can skip one you have handled, and account_id is the tracking_id that GET /api/v1/me gives your app.

  • person.erased: A person was erased. Erase what you hold about this person for this account within 30 days.
  • account.erased: An account's data must go. Erase everything you hold for this account within 30 days.
  • person.data_request: A person asked for their data. Send what you hold about this person to the address in reply_to within 30 days.
{
  "id": "ntc_cm2x9q1ab0001",
  "notice": "person.erased",
  "created_at": "2026-10-29T09:30:00.000Z",
  "account_id": "user_2dXk81vQmz",
  "person": { "id": "cm2x8z4cd0002", "email": "sam@example.com" }
}

account.erased carries reason, either app_removed (sent 48 hours after the account removed your app, and called off if it allows your app again first) or account_closed. person.data_request carries reply_to, the address to send what you hold. Your app's page can send you a test notice, marked "test": true.