Server-Side Campaign Reconciliation: Ask It in Claude
Reconciliation lines up what your server sent, what each ad platform accepted and what matched a campaign. How Curve MCP reconciles your server-side campaigns in Claude.
Server-side campaign reconciliation compares three counts for each campaign: the conversions your server sent to an ad platform, the ones the platform accepted, and the ones matched to a click or campaign. In Claude, Curve MCP reconciles your server-side campaigns: each campaign's platform-reported spend, clicks and impressions next to the conversions Curve's server-side tracking recorded, with cost per conversion by completed week. One link opens the full sent, accepted and matched view inside Curve. Curve is the HIPAA-compliant server-side tracking platform with a signed BAA on every plan, and every number its MCP server returns is rounded, with small groups withheld.
What reconciliation means once tracking is server-side
With a browser pixel, the ad platform's number was the only number, and you had no record of your own to check against. Server-side tracking gives you that record: your server decides what to send, logs sending it, and hears back from the platform.
That gives every campaign three counts, and reconciliation means reading them together:
- Sent. Conversions your server forwarded to the platform's conversion API. A fact about your tracking, not about the platform.
- Accepted. Conversions the platform took without an error. An event rejected for an expired click ID or a deleted conversion action was sent but never accepted.
- Matched. Conversions tied to a specific click or campaign. The platform matches against its own clicks and users and reports credited conversions. Your tracking can also match each conversion to the campaign that brought the visitor, giving you a count no platform graded.
The three will never be equal. Attribution windows stay open after a period ends, platforms may add view-through and modeled conversions, and uploads surface hours or days late. The guide to comparing what your tracking sent with what Google credited sorts normal gaps from broken ones. Here the question is narrower: which counts an AI assistant can safely see.
Why the gaps decide where your budget goes
Reconciliation decides whether your bidding algorithm and your budget spreadsheet are looking at the same thing.
Bidding learns from what the platform can connect
Automated bidding on Google and Meta optimizes on the conversions each platform can connect to its own ads and audiences. A booking that arrives with no identifier the platform can use still counts in your tracking, but tells the algorithm little about which campaign earned it. The campaign looks weaker to the bidder than it is, and only the gap between sent and matched shows it.
Budget splits need one referee
Ask for cost per conversion across Meta and Google, and the default math divides each platform's spend by its own credited conversions. Each platform grades its own work, with its own windows and modeling. A server-side count, attributed once under one model, measures both with the same ruler. Which count to divide by is the subject of cost per conversion by campaign.
Where each gap points
- Sent but not accepted. Usually configuration: a removed conversion action, an expired connection, or an expired click ID.
- Accepted but not matched. Usually identifiers lost on the way: a click ID stripped by a redirect, a booking tool on another domain, or a deduplication collision on Meta's event ID.
- Credited above your own count. Usually view-through credit, modeled conversions, a longer window, or a platform counting every conversion where you count every person. A setting to understand, not a pipe to fix.
The full diagnostic is in finding the gap between sent and accepted conversions. Two uncomfortable truths apply to all of it. First, a dead upload rarely looks like zero. A leftover browser tag or view-through credit keeps a trickle of conversions on the platform's report, so a failed send can pass for a slow quarter.
Second, in healthcare you never close a match gap by sending more patient data. Better identifiers on the click path, yes. Service names, form answers or anything clinical, never. Curve forwards only the fields you map to each destination, so the fix belongs on the click path, not in the payload.
What Claude can see through Curve MCP
The server hands Claude one campaign table, already shaped, rather than an API it could query any way it likes. For every campaign where enough people converted in the window, it returns:
- Spend, clicks and impressions as the ad platform reports them, with spend rounded.
- Conversions attributed by your server-side tracking on a fixed last-touch model, counted as people rather than events.
- Cost per conversion, calculated from the rounded spend and the rounded conversion count.
- Window totals plus a week-by-week series, for last week or the last 4, 13 or 52 completed weeks.
A campaign below that size is dropped whole, spend and name included. Claude sees only a rounded count of withheld rows, never which campaigns they were, so spend on a campaign that converted almost nobody does not show up here. It is in the dashboard.
Organization-level visitors, sessions, goal completions and funnel steps sit beside the campaign rows, so Claude can tell a one-campaign drop from a site-wide one.
So the reconciliation you run in Claude sets platform spend against your own conversion count, per campaign and week. For the delivery legs, Claude opens the full sent, accepted and matched view inside Curve with one link.
Worth knowing: your server-side conversion count never depends on the upload, so a Google upload that failed for a month leaves it intact. When a platform's credited number drifts from your own, open the sent and accepted view to see whether the send broke.
Questions that work
- "Compare each campaign's cost per conversion over the last 4 weeks with the last 13 weeks, and list the ones that moved most." Two windows counted separately, so a campaign too small for one week can still show up in the longer one.
- "Show our Google Ads campaigns week by week for the last 13 weeks. In which week did cost per conversion move most, and did clicks move with it?" Separates a traffic change from a conversion change. Works for campaigns with steady volume. Smaller campaigns drop out of individual weeks, so compare the 4- and 13-week totals instead.
- "Compare cost per conversion on our Meta and Google campaigns over the last 13 weeks, using our own conversion count for both." One ruler across platforms.
- "Did site-wide goal completions fall in the same weeks as campaign conversions?" If both fell, check the site and the tracking before touching bids.
- "What can't you tell me from this connector?" The server describes its own limits, so Claude can state them instead of guessing.
Questions that open Curve with one link
For these, Claude opens the full view inside Curve:
- "How many conversions did we send Google last week, and how many did it accept?" Opens the sent, accepted and matched view.
- "Which patients booked from the spring campaign?" Person-level, so never data.
- "What was ROAS on the spring promotion?" Revenue stays inside the product.
Each one gets a link that opens Curve Analyst in the dashboard. The link needs a login, works once, expires quickly and carries no data itself.
What a good reconciliation answer contains
An assistant always produces an answer. Hold it to these:
- The exact weeks. The first and last completed week by date, not "last month." The response carries its dates, so vagueness has no excuse.
- The source of every number. Spend labeled as platform-reported, conversions as your server-side last-touch count. A platform's credited conversions, from the matched view in Curve, get their own label.
- People, not events. A patient who converts twice in the window counts once. A platform may count both, depending on the conversion action's counting setting.
- Missing is not zero. Campaigns below the minimum group size are dropped and only counted. An answer that reads a missing campaign as zero, or claims to know which campaigns were withheld, is guessing.
- Hidden labels stay hidden. A campaign name the organization has not approved reads "(label hidden)." The numbers under it are real.
- Counts before ratios. Percentages built on small, rounded numbers swing hard. Ask for the absolute figures first, then the ratio.
Why the weekly rows do not add up
Each week is counted on its own, and so is the window. A person who converted in week two and again in week five appears in both week rows but once in the window total, and every figure is rounded separately. A campaign can also appear in the total yet be missing from quieter weeks. Tell Claude that up front, or it may try to "fix" one of them.
How Curve answers reconciliation questions in Claude
The answer in Claude is the last step of a pipeline that starts on your website:
- Record. The tracking script installs in place of the Meta Pixel and Google tag, so conversions land on US-hosted infrastructure before any ad platform sees them.
- Send. Each destination receives only the fields explicitly mapped to it, with identifiers SHA-256 hashed to the platform's requirements and a neutral event name in place of the service line.
- Log. Every delivery is logged with the platform's response. That log is where the sent and accepted counts come from.
- Read back. Spend, clicks, impressions and credited conversions come from each connected ad account.
- Attribute. The tracking matches each conversion to a campaign itself. Bridge tokens carry that attribution across a click-out to a separate booking tool such as IntakeQ, Calendly or Jane App.
In the dashboard, the reconciliation card sets sent, received and attributed side by side, with a match rate (the share of sends the platform received) and its daily trend, broken down by conversion action. Google's campaign table adds sent beside Google's credited conversions for each campaign. Meta stays at platform level for the sent figure, because Meta's uploads carry no campaign identifier.
Curve MCP publishes the campaign view from the last two steps in a pre-shaped form:
- Read-only tools. The data tool takes one input, a window choice, never free text, and returns no string a website visitor can set, such as UTMs or page paths.
- Small groups withheld, counts and spend rounded, and the smaller of two numbers withheld wherever subtraction could expose a small group.
- A final guard that blocks, rather than cleans, any response containing something shaped like an email, phone number, ID, date or name.
- Every call logged, and no data returned if the log cannot be written.
- Off by default. Only the clinic's primary user can switch it on, and access tokens are scoped and expire.
More on that design in why the server answers in weeks, not rows.
The limits, stated plainly
- Completed weeks only. The current week is never included, so figures can trail the dashboard by up to a week. "How did last week go?" works on a Monday. "How is today going?" does not.
- Fixed look-backs. No custom date ranges, so you cannot isolate a campaign's exact flight dates.
- Rounded counts, small groups withheld. Small campaigns and quiet weeks drop out of the answer entirely, spend included, and a single-location clinic may lose a lot of them. That is the price of an answer that describes nobody.
- One attribution model. Conversions are last-touch with a fixed lookback, which undercounts campaigns that introduce people who convert later elsewhere. Read how attribution windows change the count before judging an awareness campaign.
- Campaign level only. No ad groups, ads, keywords or search terms.
- Your AI vendor, your contract. Curve MCP works with any MCP-capable client, including Claude (desktop, web, Claude Code), ChatGPT and Cursor, and the AI vendor you connect is your choice, not a subprocessor under Curve's BAA.
Frequently asked questions
What is the difference between sent, accepted and matched conversions?
Sent is what your server forwarded. Accepted is what the platform took without an error. Matched is what got tied to a click or campaign, by the platform (its credited conversions) or by your own server-side attribution. Each gap points to a different kind of problem.
Can Claude show my match rate through Curve MCP?
Yes, one link away. Ask and Claude opens the full sent, accepted and matched view inside Curve, where the reconciliation card shows the match rate and its daily trend by conversion action.
Why is the current week missing from every answer?
Partial periods can be subtracted from full ones to isolate a sliver of time, and a sliver can hold a very small group. Completed weeks close that door.
Why is a campaign missing from Claude's answer?
Too few people converted from it in that window, so the whole row (name, spend, clicks, conversions) is left out and only a rounded count of withheld rows remains. Try a longer look-back: a campaign missing at one week may clear the threshold at 13. If it never does, it is too small to judge from aggregates, and its spend is in the dashboard.
Which conversion count should drive budget decisions?
Your server-side count, to compare campaigns and platforms, because it applies one model to all of them. Each platform's credited count shows what its bidding learns from. When the two diverge sharply on one campaign, reconcile before you move money.
Is it safe to ask these questions in Claude without a BAA with Anthropic?
It depends on your Claude plan and your policy, not on the connector alone. Anthropic's BAA covers Claude Enterprise plans with HIPAA readiness enabled and eligible Claude API organizations. Team, Free, Pro and Max plans cannot enable it, and Anthropic's own pages conflict on whether Claude Code is covered. Whatever a tool returns becomes part of the conversation sent to the model, whichever client you use. That is why the server releases only rounded weekly aggregates with small groups withheld. Whether that meets your policy is your compliance lead's call, and our Claude BAA verdict lays out the plans.
Where to start
- Pick one platform and a period that closed at least two weeks ago. Each platform keeps its own windows and counting rules, so running two in one pass hides which one moved.
- Write down the three counts. Ask Claude to open the sent, accepted and matched view in Curve and note each count, as absolute figures with their labels, never as one percentage.
- Ask Claude the campaign question. Spend against your server-side conversions, week by week, for the same platform. Look for campaigns where spend held and conversions fell.
- Make it a habit. The weekly AI reconciliation routine turns this into a short Monday check with thresholds and a log.
- See it on your own data. Book a demo of Curve MCP and bring the campaign whose numbers you trust least.
Reviewed September 2026. Curve MCP capabilities as of September 2026; Anthropic's BAA scope reflects its published BAA and HIPAA-readiness pages as of September 24, 2026.
Related articles
Stay Compliant. Scale Confidently.
Join healthcare innovators who trust Curve for HIPAA-compliant ad tracking.Launch in hours, not months. Your growth stack, now HIPAA-safe.
Book a free tracking audit