Lens

Meta Ads Source

Pull Meta (Facebook and Instagram) ad spend, impressions, clicks and one conversion event into a Lens table, by campaign or by ad, per day.

Before you start

  • A Meta access token that can read the ad account (the ads_read permission). A System User token from Meta Business Settings is the best choice because it does not expire. A personal user token works but expires after about 60 days.
  • The ad account ID, for example act_1234567890. Lens accepts it with or without the act_ prefix.
One-click Meta sign-in

A one-click Connect Meta option is coming. Until it is generally available, use a pasted token as described here.

Add the Meta connection

  1. Go to Security & Access and add a connection.
  2. Set Provider to Meta and paste the token into Token.
  3. Set Token Expires to the date the token stops working, or leave it blank for a System User token, which never expires. A pasted token is never refreshed, so the expiry date is the only warning you get.
  4. Click Save Connection.

Create the table

  1. Go to Configure > Data Tables, click + New Table, and choose Meta Ads.
  2. Name the table and pick the Meta Connection.
  3. Enter the Ad Account ID.
Or use a Recommended Setup

Recommended Setups on Configure > Data Tables has a Meta Ads card that creates the standard Meta tables in one step.

Choose what one row is

What One Row IsRowsSync
One campaign per dayCampaign, dateFull Refresh or Incremental
One ad per day (with its ad set and campaign)Ad, ad set, campaign, dateFull Refresh or Incremental
Account settings (currency and timezone)One row describing the accountFull Refresh only

Lens stores spend, impressions, all clicks and link clicks. CTR, CPC and CPM are worked out from those on the board rather than stored, because Meta's per-row rates cannot be added up.

Choose conversions

Under Conversions, pick one of:

  • Count one event: store the count of one conversion event.
  • Store conversions and their value: store the count and the value of one event.
  • No conversions: spend, impressions and clicks only.

Then pick the Conversion Event, such as Purchases, Leads or Registrations, or enter a custom conversion as offsite_conversion.custom.<ID>. Only one event per table: Meta reports the same purchase under several names, so adding more would count it more than once. For a second event, create a second table.

Set the date range and sync mode

SettingDefaultNotes
Backfill Days90History read on the first sync and on a full refresh. Meta keeps 37 months, so older dates cannot be read
Sync ModeIncrementalRe-reads recent days on every sync
Incremental Refresh Window28 daysMeta keeps updating conversions within its attribution window, so recent days are re-read
Sync ScheduleDaily

Click Create Table.

Rows are dated in the ad account's time zone, and values are in the account's currency. Lens reads both from Meta when you save and on every sync. If Lens could not read the time zone yet, you can enter it in Ad Account Timezone; Meta's own value replaces it once it is available.

Check it worked

When the table is active, compare yesterday's spend and impressions with the same day in Meta Ads Manager, using the ad account's time zone. Syncs end at yesterday (UTC), so today has no Meta data until the next day's sync.

Troubleshooting

The sync fails with a token or permission error

The token expired, was revoked, or cannot read this ad account. Create a new token (a System User token avoids expiry), update the connection under Security & Access, then click Sync Now on the table.

Conversions look higher than in Ads Manager

Check that the table's single event is the same one you compare against in Ads Manager. Recent days can also still be changing; they settle within the 28-day refresh window.

Days look shifted compared to other sources

Meta tables are stored in the ad account's time zone. If that differs from your other tables, joining them is refused. See Dates and Time Zones.