A Facebook Ads export reports spend inside the date range selected in Meta Ads Manager. Your monthly client billing record may use a different service period, a separate management fee, and one line for several campaigns. The totals will not match until both files describe the same accounts, dates, currencies, and level of detail.
This is a billing reconciliation problem. It is not an attribution problem. Conversion counts, attribution windows, and return on ad spend do not prove what the agency should invoice. The comparison needs to answer a narrower question: does the media spend and fee recorded for the client agree with the spend covered by the Facebook Ads export?
Start with the two files at their actual level of detail
The Facebook Ads CSV and the client billing file usually describe the same month at different levels.
An Ads Manager export commonly contains fields such as:
| Facebook Ads export field | Example | What it identifies |
|---|---|---|
| Account ID | 123456789012345 | The ad account that incurred the spend |
| Account name | Northstar US | A readable label that can change |
| Campaign ID | 2385190041201 | A stable campaign reference |
| Campaign name | June Retargeting | A label that may be edited |
| Reporting starts | 2026-06-01 | First date included in the exported row |
| Reporting ends | 2026-06-30 | Last date included in the exported row |
| Amount spent | 8,420.37 | Spend reported for that row |
| Currency | USD | Currency assigned to the ad account |
The monthly client billing file often looks more like this:
| Client billing field | Example | What it identifies |
|---|---|---|
| Client | Northstar Retail | The customer being billed |
| Billing period start | 2026-06-01 | Contract or invoice period |
| Billing period end | 2026-06-30 | Contract or invoice period |
| Ad account reference | Northstar US | Internal account label |
| Media spend | 8,420.37 | Pass-through platform spend |
| Management fee | 1,263.06 | Separate fixed or percentage fee |
| Adjustment | -150.00 | Credit, correction, or prior-period item |
| Invoice total | 9,533.43 | Amount billed to the client |
| Invoice number | INV-2026-0618 | Billing record reference |
The export may contain hundreds of campaign or daily rows. The billing file may contain one row per client. A row-by-row lookup cannot resolve that difference. You need to aggregate the Facebook data to the same grain as the billing record before comparing the amounts.
Separate reported spend from Meta's payment charges
Facebook Ads spend and Meta billing charges are related, but they are not interchangeable.
Ads Manager reports spend for the selected reporting dates. Meta may charge a payment method when an account reaches its billing threshold, on its monthly bill date, or under a monthly invoicing arrangement. One card charge can cover spend from several days. A calendar month can contain several charges. A charge near month end can also settle in the following month.
If the client invoice passes through ad spend for June 1 through June 30, the primary source is the spend export for that exact period. Meta payment transactions are a control for proving that the agency was charged, not a row-level substitute for the reporting export.
Keep these comparisons separate:
| Comparison | Question answered |
|---|---|
| Ads export vs client billing record | Did the agency bill the correct reported spend for the agreed period? |
| Meta payment transactions vs card or bank statement | Did the platform charges reach the agency's payment account? |
| Client invoice vs client payment | Did the client pay the amount invoiced? |
Mixing all three into one lookup creates false discrepancies. A June campaign can be correctly included in the June client invoice even when the corresponding Meta charge reaches the agency's card statement in July.
Fix the scope before comparing any totals
Most unexplained differences come from scope. Lock the following fields before touching formulas.
Ad accounts
Identify every ad account included in the client's billing. Use Account ID as the match key where possible. Account names are weak keys because they can be renamed, abbreviated, or reused in internal billing records.
Create a small crosswalk if the billing file does not contain Meta Account IDs:
| Meta Account ID | Meta account name | Client billing name | Client |
|---|---|---|---|
| 123456789012345 | Northstar US | Northstar - Paid Social | Northstar Retail |
| 987654321098765 | Northstar CA | Northstar Canada | Northstar Retail |
This crosswalk should be maintained separately from the monthly transaction data. It turns inconsistent labels into a repeatable account mapping without editing either source file.
Date range
Use explicit start and end dates. “June billing” is not precise enough if the contract runs from May 26 through June 25 or if the agency closes invoices before the calendar month ends.
Export Facebook Ads data using the same inclusive date range used by the client billing record. If the reporting period crosses two calendar months, export daily data so the correct dates can be selected without estimating a split.
Check the ad account timezone as well. Meta assigns spend to reporting dates using the account's timezone. An agency billing file built in another timezone can move late-night activity across the period boundary. Do not shift dates unless the client agreement defines billing in a different timezone. If it does, document the conversion rule and apply it consistently.
Currency
Do not add spend across currencies. A USD ad account and a GBP ad account cannot be combined into one comparison total without a documented conversion rule.
Match each account in its source currency first. If the client invoice is issued in another currency, keep these fields:
- Source spend amount
- Source currency
- Exchange rate used
- Rate date or contractual rate basis
- Converted billing amount
- Billing currency
The converted amount should be reproducible. A total in the billing currency with no retained source amount or rate is not enough for review.
Billing components
Keep media spend, management fees, taxes, credits, and prior-period adjustments in separate columns. The Facebook export can support the media spend line. It cannot support an agency fee or a manual client credit unless that item is calculated and documented separately.
Build a comparison that survives next month
To match Facebook Ads export data to monthly client billing records, preserve both raw files and build the comparison in a separate working layer.
1. Export the Facebook data at a usable grain
Use one row per day and ad account if the invoice is billed by account. Add campaign ID only when the client billing record separates campaigns, brands, or cost centers.
Exporting at campaign level when the invoice has one client total creates unnecessary rows. Exporting one account-level total when the billing period crosses a custom cutoff removes the detail needed to allocate dates correctly. Choose the lowest level required to reproduce the invoice, not the lowest level available in Ads Manager.
2. Preserve the raw export
Save the original CSV unchanged. Do not rename columns, replace account names, or paste calculated fees into it.
The raw file is your evidence. Transformations belong in the working file, where each change can be explained. This also prevents a late correction from becoming indistinguishable from the source data originally downloaded.
3. Normalize the comparison fields
Create consistent working columns:
| Working field | Derived from |
|---|---|
| client_key | Account ID mapped through the account crosswalk |
| period_start | Agreed client billing start date |
| period_end | Agreed client billing end date |
| source_currency | Currency from Facebook Ads |
| source_spend | Amount spent from Facebook Ads |
| billing_currency | Currency used on the client invoice |
| billable_spend | Source spend converted under the billing rule, if required |
| fee_amount | Fixed fee or billable spend multiplied by the agreed rate |
| adjustment_amount | Approved credit or prior-period correction |
| expected_invoice_total | Billable spend plus fee, tax, and adjustments |
Store Amount spent as a number, not text with a currency symbol. Keep IDs as text so long numeric identifiers are not rounded or converted to scientific notation.
4. Aggregate Facebook spend to the billing grain
Filter the export to the approved accounts and period. Then group by the fields represented in the billing record, usually:
- Client
- Billing period
- Ad account
- Currency
If the client receives one consolidated media-spend line, sum the approved account totals after each account has passed its own currency and date checks. Do not aggregate first and investigate later. An omitted account can be hidden by an overstatement elsewhere.
5. Recalculate the client billing amount
Apply the contract rule to the reconciled spend. For a 15% management fee:
| Billing component | Calculation | Amount |
|---|---|---|
| Facebook Ads spend | Reconciled export total | $8,420.37 |
| Management fee | $8,420.37 × 15% | $1,263.06 |
| Approved credit | Fixed adjustment | -$150.00 |
| Expected invoice total | Spend + fee + credit | $9,533.43 |
Compare each component independently. If the invoice total differs, this shows whether the problem is platform spend, fee calculation, currency conversion, or an adjustment.
For agencies running the same workflow across platforms, the Google Ads spend and client invoice comparison follows the same principle: align scope first, then calculate the bill from the reconciled platform amount.
6. Compare expected and recorded billing
Your final comparison should expose the difference rather than returning a generic matched or unmatched label.
| Client | Period | Expected spend | Billed spend | Spend difference | Expected fee | Billed fee | Fee difference | Status |
|---|---|---|---|---|---|---|---|---|
| Northstar Retail | Jun 1–30 | $8,420.37 | $8,420.37 | $0.00 | $1,263.06 | $1,263.06 | $0.00 | Matched |
| Harbor Goods | Jun 1–30 | $4,905.80 | $4,805.80 | -$100.00 | $735.87 | $720.87 | -$15.00 | Review spend |
| Cedar Labs | May 26–Jun 25 | $6,112.40 | $6,112.40 | $0.00 | $900.00 | $900.00 | $0.00 | Matched |
Use a small tolerance only for documented rounding. A tolerance should not hide currency conversion differences or omitted spend.
Trace the common mismatch patterns
When the totals differ, check the evidence in this order.
The billing period and export period differ. Compare the exact start and end dates. Re-export daily data if either file uses a custom period.
An ad account is missing or assigned to the wrong client. Compare Account IDs against the crosswalk. Do not rely on similar account names.
The billing file contains a net amount. Separate credits, rebates, or prior-period corrections from current-period media spend.
The management fee was calculated from the wrong base. Confirm whether the contract applies the percentage to gross platform spend, converted spend, spend after credits, or another defined base.
Meta charges were treated as monthly spend. Return to the Ads Manager spend export for the client period. Threshold charges belong in the payment-account reconciliation.
A late edit changed the invoice after review. Retain the reviewed version, invoice number, approval date, and any replacement record. The final report should show the adjustment rather than overwriting the earlier amount.
The finished reconciliation should be reviewable without the workbook
A correct output gives the reviewer enough information to reproduce the client bill:
- The Meta Account IDs included
- The exact reporting start and end dates
- The account timezone used for the period
- Spend by account and source currency
- Any exchange rate and converted amount
- The management-fee rule and calculated fee
- Credits, taxes, and prior-period adjustments shown separately
- Expected billing, recorded billing, and the remaining difference
- A list of records requiring correction
The remaining difference should be zero or attached to a named cause and action. “Facebook does not match the invoice” is not a completed reconciliation. “Account 987654321098765 was omitted from the June billing file, understating media spend by $100 and the 15% fee by $15” is.
