What we do with your data, and what we don’t have yet.
MagneticML reads a brand’s commercial data and writes back findings. That is a real access ask, and it deserves a straight answer rather than a badge wall.
Everything below describes the system as it is built today. The last section lists what is missing, because a security page that only lists strengths is one nobody believes — and because a claim we would have to quietly weaken later is worse than a gap we named up front.
How we reach your data
Three ways in, and none of them require you to build something first.
We connect to your warehouse
Your data stays in your cloud project. We read it across the project boundary, and the only permission you grant is read access on the specific tables in scope — for a BigQuery warehouse, that is the Data Viewer role and nothing more. We do not hold a credential inside your environment, and you do not hold one inside ours.
You send it
Files land in a private bucket and are parsed into your own raw dataset. Every row carries the id of the delivery it arrived in, so a corrected re-send supersedes exactly its predecessor rather than sweeping a date range — which means an undo is precise and auditable rather than a best guess.
We pull it
Acquiring and shaping retail data is the thing this team did for years before it was a product. If a source has no warehouse behind it, that is scope, not a disqualification.
What is separated from what
The architectural decisions worth asking about, and the reasoning behind each.
A client is a set of datasets, not a table prefix
Each client gets its own raw, semantic, model and share datasets. The reason is the failure mode rather than the diagram: under shared tables with name prefixes, a mis-resolved table name is a cross-tenant read. Under separate datasets, the same mistake is a “table not found” error.
A dataset is also the smallest unit our warehouse can attach permissions to, which is what makes offboarding a single delete of a container rather than a carefully reviewed cleanup script.
Service accounts are scoped by function, and hold no downloaded keys
Separate machine identities run the pipeline, the ingest path, the app, the export job and the spreadsheet builder, each with least-privilege grants. The app that serves the portal holds no write role on any client dataset — it should not be able to alter warehouse data even by accident.
No key files exist to leak. People reach production permissions by impersonation, deployments authenticate through federated identity with no stored secret, and even the signed links in your email are signed through a credentials API rather than with a private key sitting on a disk.
Your team sees views, not tables
When your analysts want the underlying numbers, they get a share dataset of authorized views named in your own vocabulary — weekly sales, brand and category rollups, and the log of every finding we have raised. That share dataset is the only one anyone on your side is ever granted, and your team never holds warehouse credentials at all: the spreadsheet connects on our identity, not on theirs.
Identity, links, and what a link can do
No password exists
Signing in to the portal means entering your work email and getting a link that expires in twenty minutes and opens a session lasting fourteen days. There is no password column in the database — nothing to phish, reuse, or leak. The sign-in form answers identically for an address we know and one we do not, so it cannot be used as a staff directory, and it is rate limited per address and per source.
The evidence link in your email is a different, smaller credential
Each “View evidence” link carries a token minted for one named person and one finding. It opens that brief with no login step, and it is forwardable on purpose — a category manager sending evidence to their boss is the behavior you want, not a leak to design against.
What it deliberately cannot do: open a session, reach the register, or silence a finding. Marking something “known or expected” or “not actionable” suppresses it for ninety days, so those two answers step up to a verified sign-in. The reasoning is uncomfortable and worth stating: the party most motivated to mark a retailer problem “not actionable” is the retailer.
The portal is deliberately small
It runs no JavaScript at all and declares a content policy that permits none, so there is no third-party script, no analytics beacon and no injected dependency inside a page showing your commercial data. No link can change state: clicking a URL renders a form, and only submitting it — with a server-issued, single-use token — writes anything. That matters more than it sounds, because corporate mail scanners follow every link in every message before a human ever sees it.
Which organization you belong to comes from your credential, never from the address bar. A request for another client’s record is answered “does not exist” rather than “not permitted”, because the second phrasing confirms the record.
What leaves your warehouse
Anthropic — our analysis agent runs on Anthropic’s API, under commercial terms in which content sent to the API is not used to train models. What it sees is aggregated commercial data at the level of a product line in a retail channel, not customer-level or transaction-level records. And the model never does the arithmetic: every number in every alert is computed by a query against your data, with the query recorded alongside the finding.
Postmark — the delivery path for digests and sign-in links, sending from our own authenticated domain.
Google Cloud — the warehouse, the application database, and a private bucket holding a copy of each published brief.
Google Sheets — only if you want the Explorer workbook, which is created on our service identity in our own shared drive rather than on any individual’s account.
That is the whole list. It is short on purpose, and every addition to it is a decision rather than a default.
What gets written down
The action register keeps an audit trail rather than a current state: every publication, every response, every note, every outcome verdict, every dispute of a verdict and every value claim is recorded with who did it and when — including whether the actor was a person on your side, a person on ours, or the system.
- Who opened a brief, and when. Because the link is per person, this is a name rather than a hit count — and automated link scanners are labeled as such, so a mail filter is never reported to you as engagement.
- Every decision the publishing gate made, including the ones a human overruled. That disagreement rate is the number that governs whether the gate is ever allowed to publish on its own.
- Consumed one-time tokens are kept, not deleted — they are the evidence a response was submitted once rather than replayed.
What we don’t have yet
Every vendor’s security page has this section. Most of them leave it out.
- No SOC 2. We do not have a Type I or a Type II report, and we are not going to imply one with careful wording. The plan is Type I once we have a handful of customers, Type II after that. In the meantime what exists is an automated probe that hits our own public endpoint as an anonymous attacker after every deployment, where every check is a pass or a fail and there is no “warning” state to hide in.
- We cannot revoke one evidence link. Those tokens are signatures rather than database rows, which is what lets a brief open instantly with no login — and it means the only lever we have is rotating the signing key, which invalidates every outstanding link for every client at once. Revoking a person’s sessions is immediate. Revoking their outstanding brief links is not, so an offboarded colleague keeps working links until they expire. The tokens are already per person, which is what makes selective revocation buildable; it is not built.
- Published findings live in one shared database. Your warehouse data is isolated at the dataset and permission level, as described above. The record of findings — ids, statuses, responses, outcomes and value claims — lives in a single application database with every row tagged to its organization, enforced by one scope check on every record-level route plus a second check when any change is committed. That is application-enforced separation, not a separate database per customer, and we would rather you heard it here than found it in a questionnaire.
- No published data-processing agreement or sub-processor page. The list above is complete and accurate; it is not yet a contractual document. If your legal team needs one, ask — it is a drafting exercise, not a change to how anything works.
- No written deletion timetable for warehouse data. Published briefs are kept indefinitely on purpose: a brief is the record of what someone was told, and it outlives the alert, the quarter and usually the contract. Operational logs roll off after ninety days. Anything beyond that we will put in the contract rather than assert on a web page.
- The portal is reachable by anyone on the internet. That is true of any hosted application — and reachable is not the same as accessible: without a valid session or a link minted for you, every route answers with a sign-in page or a “does not exist”.
Ten questions procurement asks
Short answers, so your reviewer can copy them into a form.
1. Where does our data live?
If we connect to your warehouse, your data stays in your cloud project and we read it in place. If you send it — or we pull it for you — the raw data lands in a dedicated dataset on our side. Either way, what we build from it and the published findings live in datasets and a database of ours, one set per client.
2. Do you copy our data or read it where it is?
We read it in place and build a modeled copy of the parts in scope. If you send us files instead of granting access, the raw files land in your own dataset on our side and are superseded precisely when you re-send.
3. Who at MagneticML can see it?
The people operating the service, by impersonating a machine identity — there are no key files to hand out and no shared login. Every machine identity is scoped to one job, and the one serving the portal cannot write to warehouse data at all.
4. What happens if we leave?
Your datasets are deleted as containers rather than cleaned out row by row, and the access grant you made on your side is yours to revoke at any time — with or without telling us. Say the word in the contract about how long we keep published briefs and we will write it in; the current default is that we keep them, because they are the record of what your team was told.
5. Who else processes our data?
Anthropic for the analysis agent, Postmark for email, Google Cloud for the warehouse and application, and Google Sheets only if you want the Explorer workbook. Nobody else.
6. Is our data used to train an AI model?
No. We use Anthropic’s API under commercial terms in which API content is not used for model training, and we do not train anything of our own on your data. Nothing about your business is shared with another client — and if we ever want to publish anything comparative, it will be de-identified aggregates, agreed in the contract first.
7. How does sign-in work, and what if someone leaves?
A link to their work address; no password exists. Removing someone ends their sessions immediately. Their previously emailed evidence links keep working until they expire — see the limits above, where we say so plainly.
8. Someone forwarded an evidence link. What can the recipient do?
Read that one finding, and record an ordinary response on it — “I’ll work this”, “I’ve done something”, “need more analysis”. They cannot open the register, see other findings, or suppress anything: silencing a finding for ninety days requires a verified sign-in.
9. Do you have SOC 2, and what about a penetration test?
Neither yet, and we will not dress up what we do have as an equivalent. What we do have: an automated anonymous probe of our public surface after every deploy, a review-first delivery model where a person confirms every publication, and a set of design decisions above that a reviewer can interrogate one by one.
10. What happens when you’re wrong?
You tell us on the brief, and the finding stops coming back. A published brief is never silently edited — its findings and numbers freeze at publication, with only the response and outcome sections live. A correction has to be a new artifact that supersedes the old one, which means the mistake stays visible. And when we measure a fix and cannot prove it worked, we report that instead of claiming it.
Have a questionnaire, or a question this page didn’t answer? Send it over — a specific answer is faster than a generic one.
Ask us anythingLast reviewed 31 July 2026. This page describes the system as built; when the answers change, this page changes with them.