Pulsar
metrics playbook · business media vs ad account media
Present: ← → Space · Esc back to Doc

Pulsar · Metrics playbook · No. 33 · Meta’s two media surfaces — what each can do, and where the numbers come from. Verified live against a real Business Manager and ad account.

Business Media vs Ad Account Media

Which window can do what, what each does when you create a post or an ad, and — after it runs — where the insights actually come from. One tidy but unreadable; one flat but the only one a tool can sync.

Companion to No. 01–32 — sits alongside No. 15 · Pulsar vs Tag Manager (what an app can reach) and feeds No. 14 · Custom vs Lookalike (the creatives you organize here are what those audiences see). Every endpoint and error code below came from a live account on 15 Jul 2026.

Contents

01 Two windows, one pool · 02 Ad Account Media · 03 Business Media · 04 Feature checklist · 05 The API asymmetry · 06 Post, ad & insight · 07 The page-blind pool · 08 What Pulsar does

01

Two windows onto one pool of assets — constantly confused

Every image and video you’ve ever used in an ad exists once in Meta’s storage. But Meta shows that storage through two different windows: Ad Account Media — a flat list bolted to one ad account — and Business Media (the Media Library) — a curated, foldered view that lives one level up, at the business. Same files. Opposite ergonomics.

Business Media and Ad Account Media are two windows onto the same files. The difference isn’t what they store — it’s what each lets you do, and what a program can reach.

Ad Account Media vs Business Media — the six differences that matter

Same asset pool, opposite windows: blue is flat and machine-readable; amber is organized and human-only.

Highlight
Ad Account Media · flatBusiness Media · organized
Where it livesOne ad account — act_…089055The whole business — one level up, shared across accounts
StructureA flat list — name + date, no foldersNested folders — ReeshSleep › Video G1 › files, plus categories
Per-item actionsAlmost none — use it in an ad, or delete itRename · Move · Duplicate · Delete — a full right-click menu
Can start a post?No — ad plumbing onlyYes — Create post, Create ad, Add to campaign
Made forMachines — the ad-creation plumbing reads from herePeople — a designer keeping a library tidy
Graph APIYES — /adimages, /advideosNONE — no endpoint returns the folders (section 05)
Reading it: the first rows make Business Media look strictly better — and for a human, it is. The last row flips everything: the tidy window is invisible to any program, and the messy one is the only thing an app can read. Sections 02–03 take one window each; section 04 turns this into a plain ✓/✗ checklist.

Interactive in the HTML version — a toggle dims one column so each window’s profile reads on its own. The printed state shows both columns at full strength.

02

Ad Account Media — the flat pool

This is the working stockroom of a single ad account: every image and video that has been uploaded or used in an ad, in one undifferentiated list. No folders, no rename, no categories. What it lacks in polish it makes up for in one thing that matters enormously — it has a real API, so a tool can list it, read each asset’s facts, and pull it into a new ad.

/act_…/adimagesevery image · returns hash, name, created_time, width, height The image hash is the join key — it’s how a creative gets bound into an ad. This is the endpoint Pulsar syncs.
/act_…/advideosevery video · returns id, title, created_time, thumbnails Videos join by id, not hash. Thumbnails come as signed URLs that expire (see the callout).
NO FOLDER FIELDthe response has no folder, no category, no label Whatever tidy structure exists in Business Media is simply absent here — the flat list is all the API knows.
ADS, NOT POSTSyou can build an ad from here, but not an organic Page post An ad account has no Page to post to — organic posting only exists in Business Media (section 06).

The thumbnails expire. Every preview URL Meta hands back is signed with an expiry (the oe= parameter — roughly five days out). After that the exact same link returns HTTP 403, which looks like a permissions bug but isn’t — it’s just stale. The fix is to re-fetch the asset by its hash and get a fresh URL; Pulsar does this automatically on read (No. 15 covers what an app can and can’t hold onto).

Ad Account Media is ugly and readable. No folders, no names, no order — but a machine can see all of it.
03

Business Media — the organized layer

The Media Library lives at the business, not the ad account — one level up, shared across every account and Page the business owns. This is where a designer actually works: nested folders, renaming, moving, categories, duplicating, a rich detail drawer, and shortcuts to Create post or Create ad. It is everything Ad Account Media is not — built for people.

NESTED FOLDERSReeshSleep › Video G1_LegPillow › files Real tree structure with breadcrumbs — folders can even be empty, waiting to be filled.
RENAME & CATEGORYgive an asset a human name and a category Meta’s underlying filename stays fixed, but the library shows the name you choose.
MOVE / DUPLICATEthe row “…” menu — move to folder, duplicate, delete Plus the launch shortcuts: Create ad, Add to campaign, Create post.
DETAIL DRAWERpreview + Details / Insights / Validation tabs Metadata — Name, ID, Size (e.g. 1080×1080), Duration, Created, Updated — a “Creative Insights” tab, and placement-validation results.

None of this exists in the API. Folders, names, categories, the tree, even that “Creative Insights” tab — every organizing feature in this section is drawn by Meta’s web UI and stored somewhere no Graph endpoint will return. To a program, a business with a beautifully sorted Media Library and a business with an empty one look identical. Section 05 proves it.

Business Media is beautiful and unreachable. Every folder you make is a note to yourself — no tool will ever read it.
04

The feature checklist — can you do it here, or here?

The whole comparison, as a plain ✓ / ✗ checklist. Read it top to bottom and one pattern jumps out: Business Media wins every human-facing row — folders, renaming, posting — right up until the last row, where it loses the only one a machine cares about.

What each media window can do✓ = supported · ✗ = not available. The highlighted final row is the one that flips the whole story.
FeatureAd Account MediaBusiness Media
Browse & search the asset pool✓✓
Nested folders & categoriesorganize assets into a tree✗flat list only✓
Rename to a human display name✗✓
Move / duplicate an asset✗✓
Detail drawer + validation results✗raw fields only✓
“Creative Insights” tab (asset-level)in the UI, aggregated across ads✗✓UI only, no API
Use in a paid ad (Create ad · Add to campaign)✓✓
Create an organic Page post (Create post)✗no Page to post to✓
Readable by the Graph APIthe one row that matters for any tool✓/adimages · /advideos✗no folder endpoint
7 of 8
Human-facing rows Business Media wins. Folders, rename, move, drawer, insights tab, posting — everything a person touches is better in the Media Library.
1 row
flips the whole table. Only Ad Account Media is readable by the Graph API — so it’s the only window a tool can actually sync and automate.
both ✓
Both can feed a paid ad. The asset is the same file either way; the window is just where you picked it from (section 06).
Business Media wins every row a human reads. Ad Account Media wins the only row a machine can.
05

The API asymmetry — a door and a wall

Here is the difference behind that last checklist row. Probe both windows with the Graph API and they answer in opposite languages: Ad Account Media hands back clean JSON; Business Media returns errors for every folder endpoint that seems like it should exist. This isn’t a scope or permission gap — the endpoints simply aren’t there.

Probe each window — the real endpoints, the real responses

Live calls on 15 Jul 2026 — ad account act_…089055, business …921. IDs shortened; responses verbatim.

Window
…

Loading…

Reading it: switch to Business Media and watch every folder endpoint fail — creative_folders and ad_studio_media_library_folders return error 100 (“nonexisting field / unsupported get request”), media_library returns 2500 (“unsupported operation”). Meta never built a read API for the Media Library. Ad Account Media, by contrast, answers with data every time.

Interactive in the HTML version — a toggle probes each window’s Graph API endpoints and shows the real responses. Printed state: Ad Account Media (/adimages, /advideos → 200 OK). Business Media’s folder endpoints all error (100 / 2500).

You can organize your Media Library perfectly. No program will ever see a single folder of it.
06

Post, ad & insight — where the numbers actually come from

Here’s the question everyone gets backwards: after it runs, which window do I read the insights from? The honest answer — neither. The media window is only where you picked the asset. What decides where the numbers live is whether you made an ad or a post. Pick a path and watch it play out.

Trace one asset: create → run → measure

Same image either way. The object you create — not the window you browsed — decides where the insights come from.

What you created
…

Loading…

Reading it: a paid ad always lives in the ad account, so its insights always come from /act_…/insights — whether you launched it from Ad Account Media or Business Media. An organic post lives on the Page, so its insights come from /{page-post-id}/insights. The Media Library’s “Creative Insights” tab is a UI convenience on top — not an API, and not where optimization data lives.

Interactive in the HTML version — toggles between the paid-ad and organic-post lifecycles. Printed state: the paid ad — launched from either window, lives in the ad account, insights from /act_.../insights (Marketing API).

The media window is a picker, not a meter. Choosing an asset from Ad Account Media vs Business Media changes nothing about where the ad runs or where its numbers report — both point at the same file, and the ad ends up in the same ad account either way. If you want ad performance, you read the ad account; if you want post reach, you read the Page. The window you browsed doesn’t enter into it.

Create → run → measure, side by sideThe only thing that changes the insight source is the object type.
StepPaid adOrganic Page post
Launch fromEither window — Create ad / Add to campaignBusiness Media only — Create post
Lives onThe ad accountThe Page
Insights fromGET /act_…/insights (Marketing API, system-user token)GET /{page-post-id}/insights (Page token)
Pulsar reads it inStrategy / Ad Diagnostic — spend, CPA, placementsContent — reach, reactions, saves
Insights don’t come from the window you browsed. An ad reports from the ad account; a post reports from the Page.
07

The page-blind pool — why everything piles together

One ad account can run ads for many Pages. On the test account, act_…089055 serves four — Mado marché, ArmAdorn, and two more. Every creative for all four lands in the same flat pool, and — because the API returns no page_id — there is nothing on an asset that says which brand it belongs to. Nothing differentiates them.

ONE AD ACCOUNT · FOUR PAGES · ONE POOL WITH NO page_id act_…089055 the ad account Mado marché ArmAdorn Page C Page D AD ACCOUNT MEDIA — THE FLAT POOL (/adimages, /advideos) no page_id — every tile the same grey, no way to sort back by brand
The colour drains out at the pool. Up top, each Page has its own identity. The moment their creatives land in Ad Account Media they become one undifferentiated grey — the API returns no page_id, so an asset can’t be traced back to the brand that used it. This is why a shared ad account’s library feels like a junk drawer: it literally is one, by Meta’s design. (The one thread that does survive is on the event side, not the asset side — see how Pulsar recovers ad↔brand attribution in No. 14’s companion data.)
A shared ad account’s media isn’t messy by accident. Meta throws away the one label — page_id — that would let you sort it.
08

What Pulsar does about it — build the missing layer

If Meta’s organized window can’t be read and its readable window has no organization, there’s only one honest move: sync the flat pool Pulsar can reach, and build the organizing layer on top — inside Pulsar. Not a mirror of your Meta folders (impossible), but a fresh, tool-owned structure that finally makes a shared account’s media navigable — and reads insights from the right place after launch.

Sync what’s readable

Pull every asset from /adimages and /advideos, keyed by hash / id — the one window with an API. This is the raw pool, imported whole.

Keep previews alive

Re-sign expiring thumbnails on read. When an oe= URL goes stale (the 403 from section 02), Pulsar re-fetches a fresh one automatically, so the library never shows broken images.

Read insights from the right source

Ad performance from /act_…/insights (Strategy / Ad Diagnostic) and post reach from /{post}/insights (Content) — exactly the split from section 06, so the numbers are never read from the wrong place.

Add the organization Meta won’t expose

A Pulsar-owned layer — folders, an editable display name, tags — that the Media Library keeps to itself. Because it lives in Pulsar, it’s page-aware in ways the flat pool can’t be: the junk drawer becomes a sorted shelf. (On the roadmap — today Pulsar carries a flat folder label + tags per asset; the full nested tree is the next build.)

Meta gives you an organized library you can’t read and a readable library you can’t organize. Pulsar syncs the one it can reach and organizes it itself.
The whole playbook in one gridTwo windows, what each offers, and where Pulsar stands.
CapabilityAd Account MediaBusiness MediaPulsar
Readable by APIYESNOSYNCS THE FLAT POOL
Folders & namesNONEFULL (UI only)FLAT LABEL + TAGS TODAY
Create post / adAD ONLYPOST + ADBOTH, SCHEDULED
Insights source/act_/insightsUI TAB ONLYAD + POST, FROM SOURCE

The one honest line: Meta’s two media windows force a trade — organized-but-invisible or readable-but-flat — and neither is where your insights live. Pulsar takes the readable pool, rebuilds the organization on its own side, and reads ad and post numbers from their real sources. You lose nothing you could sync, and gain the folders, names, page-awareness and honest metrics Meta keeps scattered.

1 / 9