Integrations · Meta

Meta (Instagram and Facebook reach)

Esy reads how many times a brand’s Instagram and Facebook posts were seen, through Meta’s Graph API, and shows it as the Plan’s Reach. The connection only reads. It can’t post, reply or spend.

Who can connect today
Esy reads the Pages and Instagram accounts in its own Meta business portfolio, through a system user that only has read access. Connecting your own Meta accounts to your organization comes later.

What’s read

Everything covers the last 28 days, today included.

NetworkNumbers
InstagramViews; accounts reached; views on each of the last 7 days; each post in the window with its views and reach
Facebook PageViews (each time the Page’s posts were shown), by day

Views count every time something was shown, so one person can count more than once. Reach counts accounts, once each. Meta has replaced impressions with views.

Which account is a channel’s

ChannelMatched by
Instagram, with a handleThe username, such as @northwind
Facebook, with a handleThe Page’s name or id
Either, with no handleThe one Page named like the brand’s domain (Northwind.studio for northwind.studio), and for Instagram, the account linked to it

Esy never picks the closest match. A channel that matches no account isn’t counted, and the Plan says why.

What the course returns

GET /v1/verticals/{id}/course carries reach (or null when nothing was read), with syncedAt, and the funnel’s reach is its views. The total adds up only the channels that were read. notCounted.reach names the rest. GET /v1/connections lists the connection and its last sync; POST /v1/connections/meta:sync syncs now.

the course, in partjson
"reach": {
  "days": 28,
  "views": 412,
  "channels": [{
    "channelId": "nw-ig", "network": "instagram", "account": "@northwind",
    "views": 412, "reach": 230,
    "last7": [0, 0, 10, 40, 90, 120, 152],
    "posts": [{ "url": "…", "title": "First line of the caption", "on": "2026-11-03", "views": 152, "reach": 98 }]
  }]
},
"notCounted": { "reach": "LinkedIn and YouTube views aren’t read yet." }

Syncing

  • Esy syncs Meta every 3 hours and stores each day’s views, so the Plan reads stored numbers and never waits on Meta. Days are kept, so views add up past Meta’s 28-day window.
  • The Data page shows when Meta last synced, each account’s views, and when the next sync runs. Owners and admins can Sync now.
  • If Meta refuses or can’t be reached, the account keeps its last numbers and Data says “Last sync failed” with Meta’s reason. Everything else still loads.

Security

  • The token belongs to a read-only system user, not to a person, and lives only in api.esy.com’s secrets.
  • It travels in a request header, never in a URL, so it can’t end up in a log line or an error.