Security

Last updated: October 17, 2026

This page describes what PaidCheck does with the credentials and data you give it, as the service is built today. If anything here is unclear or you think something is wrong, email support@paidcheck.app.

1. Restricted Stripe keys only

2. The exact permissions we ask for

Create the restricted key with these permissions and set everything else to None:

CustomersReadmatch a subscription to the customer's email, ID and metadata
Subscriptions (Billing)Readknow who is active, trialing, past_due, unpaid or canceled, and seat quantities
ChargesReaddetect duplicate charges, refunds and one-time payments
EventsReadfind events whose webhook delivery failed (pending_webhooks > 0)
Webhook EndpointsReaddetect disabled endpoints and endpoints missing key events
Checkout SessionsRead (optional)optional: one-time purchases (mode=payment) and telling separate checkouts apart
InvoicesRead (optional)optional: link charges to subscription periods (fewer double-charge false positives) and invoice emails
EntitlementsRead (optional)optional: count Stripe active entitlements as paid access
Everything elseNonePaidCheck never needs Write on anything.

PaidCheck only makes read (list) requests to the Stripe API. It never creates, updates, refunds or deletes anything in Stripe. It can't check whether a key also has Write permissions, because it never makes write requests, so please make sure every other resource is set to None when you create the key.

3. How stored credentials are encrypted

4. Where data is stored

PaidCheck runs on Vercel. It has no separate database: everything is stored as JSON documents in Vercel Blob with private access. All traffic to paidcheck.app uses HTTPS, and PaidCheck only connects to an access feed or Supabase project over an https:// URL.

5. What we store, and for how long

6. The free report doesn't keep your keys or data

The free leak report uses your Stripe key, any access-feed credentials and any CSV you paste or upload for that one request, in memory. The results go back to your browser. We don't store the keys, the CSV, the Stripe data or the report. The only thing written to storage is the rate-limit counter keyed by a hash of your IP address (see above). If you dismiss a finding there, that choice is saved only in your browser.

The key checker works the same way: it makes one read-only list request (limit 1) per resource, never stores the key and never returns it in the response. It also keeps only the hashed-IP rate-limit counter.

If you choose to have the free report summary emailed to you, that goes in a separate request that never contains your keys.

7. Deleting data and revoking access

8. Analytics

We use Vercel Web Analytics, which is cookieless, for page views and anonymous product events. Before an event is sent, any value that looks like a key, secret or email address is replaced with "[redacted]".

9. Reporting a security issue

If you find a vulnerability or think a key may have been exposed, email support@paidcheck.app. Please include steps to reproduce, and give us a reasonable chance to fix the issue before you disclose it publicly. Our security.txt lists the same contact.