Field note

Where your data goes.

We collect public signal about your market, file it against your project, and hand it back through a dashboard, an email and an MCP server. Here is the map, written from the code, uncomfortable parts included.

The shape of it

Collection happens on a different machine from serving.

The passes that fetch, score and file everything run on a rented VPS on a cron schedule, not inside the API. Render runs a separate service answering your dashboard, your MCP client and your email. Both talk to one Supabase project holding the tables and a bucket where your research documents sit as files. This site is a static build on Vercel and keeps nothing.

A catcher's mitt_ref-mitt.png1024 × 1024
What comes in

Almost everything we collect was already public.

Two connectors need a credential you gave us on purpose, and both say so. Nothing here touches your customer records.

SourceWhat the pass doesWhere it stops
Google results pagesRuns your tracked queries and files what the page returned, dated.The query leaves. Nothing about your customers does.
Search demandPulls the demand series per term, stored by date.Volume is modeled by the provider, not metered by us.
Reddit and XCollects public posts on your topics, with author, date and link.Fetched on our provider account, not yours.
Yelp, Maps, TripadvisorCollects reviews for a listing named in the topic config.Zero API calls until you hand us the listing URL.
Instagram and TikTokSnapshots public post counts daily, to see how fast one moves.Counts and captions. Nothing behind a login.
Your websiteSame domain only, obeys robots.txt, capped page count.On demand. There is deliberately no cron line.
WordPressReads the public REST API for pages and media.Your application password goes only after an anonymous read is refused.
ShopifyReads pages and products through the Admin API.Read only. This pass never writes to your store.

Who can read a given row?

Worth knowing which layer does the work. The pipeline and the API connect to Supabase with a service role key, which bypasses row level security by design. So for anything the API serves, the check lives in the route, not in the database.

Membership decides, every request

A scoped route checks your token, then whether you are assigned to that project or belong to the client that owns it. No match, 403.

Admin is a flag on a row

One boolean on your profile. Admin-only routes read it and refuse everyone else. It is also how a Benchmates operator sees across projects.

The browser gets fenced separately

Two lookups run from the dashboard with the public key: your admin flag, your project picker. Both tables match rows to your auth id.

One key, one person

An MCP key names a user, not a project. What it reaches is resolved on every call by one function, and a build test enforces that.

Anything a pass prints crosses a redactor before it reaches a run log, an alert email or an error report. Labelled secrets, bearer headers and vendor prefixed keys come out as three asterisks.

About that tool-call log.

Using the MCP server from Claude, one thing reaches us per lookup: a tool name and its arguments. Your conversation stays in your Claude account, and we could not record it if we wanted to, because the protocol never sends it.

The lookup itself we do record. Tool name, arguments verbatim, whether it worked, and when nothing came back, which kind of nothing. Search arguments often arrive as a sentence in your own words, so treat that as your text and not as metadata. What the tools sent back is never stored.

Service role only, read through an admin endpoint, never with a signed in user session. Ask for a copy of yours any time.Who can reach it

Two providers get text, for two different jobs.

Anthropic’s Claude does the judgment work: scoring a mention, mining a document for concepts, drafting content. Google’s Gemini turns a document into a vector so search can find it again. Both get the text being processed. Collection runs through Apify, a SERP provider and DataForSEO, which get a query or a public URL, and email leaves through Resend.

Benchmates itself trains no model and fine tunes no model, and there is no such code in the system. What a provider then does under its own terms is their document to read, not ours to paraphrase.

Ask us these before you sign.

Can Benchmates staff read our project?
Yes. An admin account reads across projects, and the pipeline connects with a key that bypasses row level security. That is how support answers a question and how the passes write at all. A flat no here would describe a system that could not run.
Does anything publish without a person pressing the button?
No. WordPress gets status draft. Shopify, Mailchimp and Substack the same. Instagram calls no API at all: the pass renders an image and a human shares it from their phone.
Somebody leaves. What happens to their access?
Revoke that one key and nothing else is touched. Take them off the project and the next question is already scoped right, because access is worked out per call rather than baked into the credential.
Where does the data physically sit?
Supabase holds the tables and documents, a VPS runs the pipeline, Render runs the API. Regions and retention depend on how your instance was set up, so ask about yours.

What this page does not claim.

We hold no certification, and nobody outside the company has audited this. The page describes what the code does, which is a smaller claim than a badge, and a checkable one.

It says nothing about encryption at rest, backups, retention windows or how fast a deletion request completes. Those turn on your deployment, so ask. If something above stops being true, this page is wrong and we want to be told.

Full source list on the integrations page. The read only tools are under the MCP server.

Request access