Analyze, attribute, act
Three products from one shop, built on the same platform and the same tenets. Below is what each one does, what the pieces do together, and which connections are real today rather than planned. That last part is the section most suite pages leave out.
One question each
Paid media fragments across tools that each solve a slice. These three are the slices we kept needing on our own accounts.
| Product | Verb | The question it answers | Relationship to your ad accounts |
|---|---|---|---|
| TrailMap | Analyze | What are the platforms claiming, and what should I fix first? | Reads |
| Trailhead | Attribute | Which clicks became real revenue? | Reads, plus a gated conversion write-back |
| Outfitter | Act | How do I make the change everywhere, without breaking anything? | Writes, behind a mandatory approval gate |
Analyze, attribute, act, then analyze the result. The loop is the product.
TrailMap
Upload or connect paid-media data from six platforms and get a prioritized action plan. A deterministic engine computes every number and an analyst layer ranks and explains the fixes. Live, with paying customers.
findtrailmap.com →Trailhead
Captures the ad click on your own domain, joins it to banked revenue by hard evidence, and reports true ROAS by channel under five attribution models, with attributed revenue broken out by campaign. Early access.
You are here →Outfitter
Build a batch of ad changes, dry-run it against the live account, and publish only what a person approved against the exact plan. Early access.
adsoutfitter.com →TrailMap and Trailhead, in both directions
TrailMap knows what was claimed. Trailhead knows what was banked. Put the two in one place and you get the number neither can produce alone.
Claimed spend, in
Trailhead imports TrailMap's spend and claimed conversions by paste, file upload or a fetch URL. It accepts both shapes TrailMap produces: the live run report, channel by day, and the legacy dashboard artifact. The payload is shape-sniffed on arrival. The run report keeps TrailMap's own channel split; the legacy artifact only carries account-level months, and Trailhead imports it as one channel rather than inventing a split it was never given.
The leakage table
Claimed CPA against true CPA, true ROAS, and the conversion gap, channel by channel, beside totals that are correct in every case. When TrailMap's channel keys and Trailhead's resolved channels do not overlap, the per-channel rows cannot join and the totals are the number to read.
Revenue truth, out
Mint a scoped, show-once API key and Trailhead exposes its attributed-revenue feed for TrailMap or any other consumer to pull. Channel by month, integer micros. The key is stored hashed and the endpoint answers only with it.
What this is, precisely. Import, export and a one-click connect handshake. Connected customers close the loop with these surfaces today. Fully hands-off background synchronization in both directions is the next step on the roadmap, and until it ships we would rather describe this as what it is.
Trailhead and Outfitter
Outfitter is the third product and the act step. The sequence is real and it is how the three are designed. The data connection between Trailhead and Outfitter is not built.
What is true today
- Both products exist and are usable. Outfitter publishes to Google Ads behind its approval gate. Trailhead does the attribution described on this site.
- They share a spine. Outfitter's tenancy, authentication, audit, security preflight and credential encryption were ported from Trailhead 2.0, so the two behave the same way about your data.
- The workflow works by hand. Read a finding in one, make the change in the other. That is a person carrying a decision between two tabs, which is worth naming rather than dressing up.
What is planned
- Findings that arrive prefilled. A finding in one product becoming a drafted changeset in the other, still going through the same approval gate before anything publishes.
- Launch events reaching capture. A published change is a known moment in time, and attribution reads better when it knows about it.
- Shared entitlements. One subscription, one seat list, across whichever products you run.
Why say this at all. A suite page that implies three products already exchange data is the easiest sale to make and the fastest trust to lose. The sequence is the reason to buy more than one. The plumbing is a roadmap item, and it is listed as one.
What all three refuse to do
These are enforced in code and tested, not printed on a values page. They are the reason the three feel like one product.
No model-authored numbers
Every figure is computed in code. Where an analyst layer exists it writes prose only, and the prose is checked against the payload it describes. A language model never produces a number you act on.
Nothing writes without a human
Both products that touch a live ad account use the same shape: a dry-run plan, an approval bound to that exact plan by hash, then an idempotent send. Change the plan after approval and the approval is void.
Absent beats fabricated
When there is not enough data to answer, all three abstain and say why. A score that cannot be computed is missing, not zero. An unmatched outcome stays unmatched rather than being assigned somewhere plausible.
Tenancy that fails closed
Every query is scoped through a single dependency, and reaching across tenants returns a 404 rather than a 403, so the error never confirms that the thing you asked for exists. Tests run against SQLite and PostgreSQL, so a tenancy rule that holds on one has to hold on the other.
Run two of them together
TrailMap and Trailhead are $399 a month as a pair, and the pair includes the integration described above.