Ad spend sync problems
What Meta's errors mean when the ad account connection fails, and why spend, Meta leads or cost per lead can look wrong.
When Check connection or a sync fails, the website's page shows Meta refused the request or The last sync failed, with Meta's own message underneath. Find the message below. After fixing the cause, click Check connection, then Sync last 30 days.
Connection errors
The message mentions ads_read, ads_management or "permission"
The token does not have the ads_read permission, or its system user is not assigned to this ad account. In Business Settings, open the system user, check that the ad account is listed under its assets with View performance, then generate a new token with ads_read ticked and paste it in. Adding a permission to the system user does not change a token that already exists. See Create an ads token.
The message says the object does not exist, cannot be loaded or lacks permissions
Usually the Ad account ID is wrong, or belongs to a different business than the token. Copy the number again from Ads Manager's account menu. With or without the act_ prefix both work. If the ad account belongs to another business, see Agencies and partner access.
The message mentions an expired session, an invalid or malformed token, or OAuth
The token was revoked, expired or copied incompletely. Tokens made in Graph API Explorer or from a personal login expire within hours or days; tokens of a system user with expiry Never do not. Generate a new system user token and paste the whole string, which starts with EAA.
I ticked "Reuse the Conversions API access token" and it fails
The Conversions API token is usually made in Events Manager for the pixel only, without ads_read. Untick the box and paste a separate system user token into Ads access token.
The message mentions too many calls or a request limit
Meta limits how often an ad account's reports can be read. Pixel Relay retries on the next hourly sync, so nothing is lost. If it keeps happening, another tool may be reading the same ad account very often.
Staff were alerted about failures
After three failed syncs in a row, staff get one alert a day until a sync succeeds. Fix the cause above and run Sync last 30 days: any days missed while it was failing are filled in.
Numbers that look wrong
Spend is zero or missing for some days
Either the ads did not deliver those days, or the connected ad account is not the one running these ads. Check Amount spent in Ads Manager for the same account and days. Spend days follow the ad account's timezone, shown under Ad performance, so an account in another timezone can shift spend to a neighbouring day.
Spend differs slightly from Ads Manager for yesterday or today
Meta revises the last couple of days as late impressions and clicks come in. Pixel Relay refreshes today and yesterday every hour, so the numbers settle on their own.
Meta leads are zero but the website has leads
Meta leads come from the pixel's Lead conversions Meta credits to the ads. They are zero when the campaigns do not run against this pixel, Meta could not tie any lead to an ad within the attribution window, or the website's leads go to Meta under another event name. Cost per lead, based on the relay's own count, is still correct.
Website leads are higher than the leads we count ourselves
Every event mapped to Lead is counted, including internal forms your team uses, such as a page for entering phone enquiries. Leave those forms out of the relay, or send them as another event: see Leaving forms out and event mappings.
Website leads are lower than the form entries on the site
A form the relay does not see is not counted. The usual cause is a form that sends visitors to a thank-you page: with WordPress and Gravity Forms, set the website's Server key in the plugin so those entries are sent from the server. See Gravity Forms. Leads your team enters in another system, such as a CRM or phone system, never reach the relay.
Most leads are on the Unattributed row
Attribution only covers visits that arrived through an ad carrying the URL parameters, after Attribute leads to campaigns and ads was turned on, and within 7 days of the click. Check that every active ad has the parameters, and that the WordPress plugin is on 1.1.1 or later if forms are sent from the server.
Related articles
Still stuck?
Tell us what you are trying to do and we will help you set it up.