
Most teams do not have a Facebook video data problem. They have a translation problem. The numbers exist — views, retention, reactions, geography, drop-off points — but they sit in a dashboard nobody opens until a campaign is already finished. The Marketing API changes that, because it lets you pull video performance into your own storage, join it with production metadata, and answer questions the native interface never asks.
This guide covers the whole path: getting access, choosing the right endpoints, pulling data without breaking rate limits, interpreting the metrics that actually matter, and turning all of it into creative briefs your editors and AI video tools can act on immediately.
Before you write a single API call, write down the three decisions you need to make this quarter. Not the metrics you find interesting — the decisions. For example: which hook style holds attention past the first five seconds, whether 15-second or 45-second edits earn more completions, and which markets justify localized captions and voiceover.
That framing matters because the API returns a firehose. A single request can return dozens of metrics sliced by age, gender, country, region, placement, and platform. Without a decision attached to each metric, you end up building a dashboard that nobody reads and a pipeline that costs maintenance time for nothing.
A useful exercise is to write your questions as sentences with a blank in them: We should invest more in ___ format because ___. Every field you request should fill one of those blanks. If it does not, drop it. You can always add fields later — removing them from a live pipeline is harder.
Video performance on Facebook flows through two separate pipelines, and confusing them is the most common early mistake.
Ad-level video data arrives through the Insights edge on ad objects inside an ad account. You get delivery context — spend, reach, frequency, placement — alongside video-specific fields. Organic Page video data arrives through the video node itself, with permissions tied to Pages rather than ad accounts.
If you are running both paid and organic video, you will need both paths, and you will need a shared key to join them. The video ID is usually the cleanest join key, but it only survives if the same asset was used for both. Otherwise join on campaign plus publish date.
A working shortlist looks like this:
Large date ranges typically return an asynchronous job rather than an immediate response. You submit the request, receive a job identifier, and poll until the report is ready. Build that polling into your code from day one; bolting it on later usually means rewriting your whole fetch layer.
Access configuration is where most schedules slip. The sequence below is the shortest reliable path.
Create a developer app, connect it to the Business Manager that owns the Pages and ad accounts you care about, and complete business verification. Verification is not optional for production access to most video fields, and it takes the longest of any step, so start it first and do other work while it processes.
Request the narrowest set that covers your use case. Typical video analytics needs include:
Request standard access while building and testing. Upgrade to advanced access only when you are ready to run against accounts you do not own personally.
Use a short-lived user token for exploration in the Graph API explorer. Use a Page token when you are calling Page and video endpoints. For anything scheduled, use a long-lived system user token tied to the business. Rotate it on a calendar reminder rather than waiting for a failed job at 3 a.m.
Here is a workflow that scales from a single Page to a multi-brand portfolio.
Decide whether you need daily, weekly, or campaign-total numbers. Daily data is essential for diagnosing publishing cadence. Weekly data is better for creative comparison, because it smooths out weekend dips and one-off spikes.
Start with a small core: views at your chosen threshold, average watch time, completion count, reactions, comments, shares, and reach. Add demographic breakdowns only after the core is stable. Breakdowns multiply row counts quickly and can triple your storage needs.
Every list response is paginated. Follow the cursor until it is empty rather than hardcoding page counts. Wrap the call in exponential backoff so a transient throttle does not kill a nightly job. Batch independent requests where the API supports it, and cache anything that will not change — a video published six months ago does not need fresh metadata every hour.
Save the untouched JSON alongside your cleaned table. When a metric definition shifts or a field is renamed, you can reprocess history instead of losing it. This one habit saves more time than any dashboard trick.
Flatten nested breakdown objects into columns: date, video ID, metric, breakdown dimension, breakdown value, value. A long, narrow schema survives new breakdown types far better than a wide one.
Build views around the decisions from step zero. One chart per question. If a chart does not change what someone does on Monday, delete it.
Metric literacy separates teams that improve from teams that just report.
A view at the shortest threshold counts the moment playback begins, which makes it excellent for measuring reach and terrible for measuring quality. ThruPlay counts watches past a longer threshold, so it correlates better with genuine interest. Completions tell you who stayed to the end. Track all three but judge creative on the middle and last ones.
Retention data shows how attention decays across the runtime. The first drop is usually the largest and least interesting — viewers scroll past. The second drop, wherever it lands, is your craft problem: a slow transition, a redundant line, an unanswered question.
Plot retention as a percentage of the audience still watching, and compare videos of similar length. Comparing a 12-second clip to a 90-second one on absolute retention flatters the short one every time.
Shares and saves are stronger intent signals than reactions. A high reaction count with almost no shares often means the video was pleasant but not useful. Comments are noisier but reveal language you can reuse in your next hook.
Age and gender breakdowns help you decide casting, pacing, and music. Country and region breakdowns decide whether you localize captions, swap a currency reference, or cut a market-specific joke. Watch for audience overlap between campaigns before you conclude that one creative is winning — frequency inflation can make a mediocre video look efficient.
Data that stays in a chart is expensive trivia. Here is how to push it back into production.
If reach is healthy but retention collapses early, the problem is the opening frame, not the story. Check whether the first visual matches the promise in the caption. Mismatch here is the single most common cause of early drop-off.
Vertical, sound-off, in-feed placements reward immediate visual clarity and on-screen text. Feed placements with sound reward opening audio cues. Pull placement-level data before you decide a creative failed — sometimes the same video wins in one position and dies in another.
Do not declare a winner from two days of data. Aim for enough impressions per variant that a normal day's variance cannot explain the gap, and hold creative constant for a full weekly cycle so you are not measuring the calendar.
Analytics gives you constraints: a hook length that works, a pacing curve that holds, a tone that lands with a specific age band. Those constraints are excellent inputs when you generate variants with AI video tools. Instead of asking for a generic version of an ad, you ask for a variant that opens with a visual claim, holds a steady pace, and targets the audience segment your retention curve says is strongest.
Platform APIs change. A reporting layer that assumes stability will break loudly.
Pin your API version explicitly rather than relying on a default. Name your stored tables with the version and the metric family so migration is a matter of adding a table, not rewriting queries.
Add a few cheap assertions: row count is greater than zero, no date gaps in the last seven days, no metric exceeds a plausible ceiling, and every video ID in your table exists in your asset library. These catch broken jobs before anyone presents a wrong number.
Alert on job failure and on data staleness, not on metric movement. Movement alerts generate noise and train people to ignore them.
Availability depends on the object and the metric. Plan on recent history being reliable and treat older windows as best-effort. If historical comparison matters to you, start storing raw responses now — that archive becomes your long-term memory.
Large date ranges, many breakdowns, and broad metric sets are processed asynchronously. Save the job identifier, poll with backoff, and store the finished result. Do not re-submit the same request on every poll.
No. Ad account data and Page video data use different permission sets and different endpoints. Plan for two integrations even if the final report merges them into one table.
Daily is enough for most content teams. Refresh hourly only if you are actively managing a live campaign and need intraday pacing. More frequent refreshes cost processing time without improving creative decisions.
Not really. Small samples produce unstable percentages that swing wildly week to week. Aggregate to a coarser dimension — age brackets, regions — before drawing conclusions.
Compare reach against completion rate for each video over the same window. High reach with low completion points at the opening seconds. Low reach with normal completion is a distribution problem, not a creative one.
Monday: refresh the pipeline and run quality checks. Confirm last week's data landed without gaps.
Tuesday: review retention curves for every asset published in the previous week and flag the two largest unexpected drops.
Wednesday: pull placement and demographic breakdowns for the top and bottom three videos. Note whether the gap is creative or distribution.
Thursday: translate findings into two concrete briefs — one to repeat a winning pattern, one to test a counter-hypothesis.
Friday: publish the test versions, log the hypothesis in your asset library, and set the review date. A hypothesis written down is a hypothesis you can actually settle.
Repeat weekly. Within a quarter you will have a library of tested patterns and a retention benchmark specific to your audience — which is far more valuable than any single report the API can return.

Alexander
Vidu Q4 alternatives compared: Kling 4.0, Seedance 2.5, Wan 3.0, and Runway Gen-4 — 4K support, input modes, durations, audio, and what each costs in credits on Domer.
The top 4K AI image generators on Domer compared: Flux 3 Klein, Nano Banana 2.1, GPT Image 2.5, GPT Image 2, and Nano Banana Pro — 4K credit costs, reference limits, and speed.
Nano Banana 2.1 vs GPT Image 2.5 Flare compared: credit costs per resolution, aspect ratios, reference images, text rendering, and which tasks fit each model.