Security
What we keep,and what we never see.
The question every agency asks before connecting a client’s ad account, answered by the people who built Adtool. Not by lawyers.
No passwords
You sign in with Meta and Google directly. We get a scoped token, never a password.
Isolated per organization
Row-level security on every table, enforced by the database itself.
Tokens encrypted
AES-256-GCM, with the key kept outside the database.
Revoke in seconds
Remove Adtool in your Meta Business settings. No help from us needed.
01
In one paragraph
Adtool is a thin layer on Meta’s Marketing API, built so you can check it yourself. You sign in through Meta with OAuth 2.0, so we never see or store a password. Everything Adtool does runs through Meta’s own permission system, under a scoped token you can revoke at any time. Every piece of data we hold is kept apart per organization by row-level security, enforced by the database itself, on every table.
02
What we store, precisely
We keep what runs your workspace, and nothing in case it comes in handy.
We store
Account and team data
Your name, email, organization membership and workspace settings.
Campaign setup
The campaigns, ad sets and launch settings you build, so your work can be reused and traced.
Creatives and thumbnails
The creatives you upload, while we deliver them to Meta, and thumbnails so your library and reports load at once.
Performance numbers
Impressions, reach, spend and results from Meta’s API, for your reporting. Totals about your campaigns, never a word about the people who saw your ads. Meta never shares that, and we never store it.
We never store
Meta or Google passwords
With OAuth 2.0, your credentials go to Meta and Google directly. Only a scoped token reaches us.
Audience members or customer lists
The people in your audiences never reach Adtool. Your setup names an audience by its ID and name; the members stay with Meta. There’s no table for audience-level personal data in our database, by design.
Card data
Stripe (PCI DSS Level 1) handles payments. We keep a customer reference ID and nothing more.
03
Access and isolation
- Row-level security on every table. The rule that keeps organizations apart doesn’t sit in our code, where a bug could skip it. PostgreSQL enforces it, so a query scoped to your organization can’t return another organization’s rows.
- Every data route checks who’s asking. Every request that touches your data re-checks the session on the server first. Privileged operations, our own admin tools included, sit behind separate allowlisted checks that fail closed.
- Signed webhooks only. Callbacks from Stripe and Meta are verified by their signature (HMAC) before we process them. Unsigned requests are rejected.
- Internal access. Only the few engineers who run the system can reach production data, under the audit-logged limits our privacy policy commits us to.
04
The Meta connection
The part agencies look at hardest, so here it is in full.
- Authorization, not credentials. You grant access on Meta’s own domain. Adtool gets a scoped OAuth token with only the permissions it needs to manage pages, upload creatives, read performance and launch ads.
- Encrypted, with the key kept elsewhere. Meta and Google tokens are stored only encrypted (AES-256-GCM, applied by the application), with the key held outside the database, so a copy of the database alone can’t act on an ad account. Your Meta token is decrypted only on our servers, never in your browser. The one token your browser does get is a short-lived Google one, because Google’s own Drive picker needs it to open.
- Revoked at once. Remove Adtool in your Meta Business settings and the token stops working right away. No leftover access, nothing to ask us for.
- A full audit trail, kept by Meta. Everything runs through Meta’s permission system, so every action Adtool takes shows in your Meta activity history, just as if a teammate had done it. You never have to take our word for what happened.
- Syncing inside Meta’s limits. Our performance sync runs well inside Meta’s API limits, and we pace requests per ad account, the discipline Meta expects of platforms with advanced API access.
- Checked by Meta, every year. With advanced access to Meta’s advertising APIs, Adtool goes through Meta’s annual Data Protection Assessment. Falling short would cost us the access the product runs on, so our incentives line up with yours.
05
Infrastructure and encryption
We chose not to run servers of our own. Adtool runs on independently audited infrastructure:
- SupabaseDatabase and sign-in
- VercelApplication hosting
- StripePayments
- CloudflareMedia processing and delivery
All traffic is encrypted in transit with TLS, and data at rest is encrypted with AES-256 at the infrastructure level on each of these platforms. The tokens you grant us get a second layer: the application encrypts them itself (AES-256-GCM), the database only ever holds that encrypted form, and the key is kept apart from it. The full list of providers, with where data lives and how transfers are safeguarded, is public on our subprocessors page. Nothing is left out.
06
European by law
Adtool ApS is a Danish company. GDPR is the law we’re incorporated under, not a box we ticked to sell in Europe.
- A DPA as standard. Our Data Processing Agreement is part of the standard terms. No enterprise tier, no negotiation.
- Documented transfer safeguards. Every US-based subprocessor works under the EU Standard Contractual Clauses, documented provider by provider on our subprocessors page.
- Deleted on request, revoked at once. Disconnecting Meta cuts our API access at once, and a deletion request to us removes your stored data. Both are permanent. The only exceptions are records the law makes us keep, like invoices under Danish bookkeeping law, which follow the retention periods in our Privacy Policy.
The formal documents: Data Processing Agreement · Subprocessors · Privacy Policy
Questions
Worth asking us.Answered plainly.
Campaign structure, uploaded creatives and aggregate performance numbers, the kind you’d show in a reporting deck. Not the people. Audience members, customer lists and card data never enter our database.
Scoped API tokens, aggregate campaign numbers and creatives, each kept apart per organization by the database. The tokens are encrypted, so a copy of the database alone can’t use them, and you can revoke them from Meta’s side at once. No passwords in our systems to leak, and no audience-level personal data to expose.
No. Every action shows in your Meta activity log, attributed and timestamped by Meta, a trail we couldn’t change if we wanted to.
Revoke access in your Meta Business settings (seconds, and you don’t need us), then ask us to delete your data (permanent). Nothing holds you in.