Mubeen Khan.
← All products

Chrome extension · MV3

AdLib

Makes Meta's Ad Library usable — sortable, filterable, exportable. The most technically demanding thing on this site.

In store review

PlatformChrome, Manifest V3
StackTypeScript, React, Vite, CRXJS
RoleEverything — research, build, store submission
StatusIn Chrome Web Store review

The problem

Meta's Ad Library holds every ad running on Facebook and Instagram and is close to unusable. You cannot sort it. You cannot filter it properly. You cannot export it. Finding which of an advertiser's two thousand ads has been running longest means scrolling, by hand, for a very long time.

Every commercial tool in this space solves it by scraping Meta from their own servers. That is the easy path and it is the one I deliberately did not take.

What I built

The part that was actually hard

The data comes from intercepting the page's own GraphQL responses, which means running code in two isolated JavaScript contexts and bridging them, with reconciliation counters so a dropped message can never look like an advertiser simply having fewer ads.

Meta's field names change without warning. Every one of them is quarantined in a single adapter file, and an 878-case fixture suite built from real captured traffic gates every change — so when the schema drifts, exactly one file needs editing and the tests say which line.

One measurement changed the whole product. Reach data exists only in a per-ad request, one ad at a time, so bulk reach estimation is not honestly possible on a user's own session. I measured that before building the feature and cut it, rather than shipping a number I could not stand behind.

Where it is now

In review at the Chrome Web Store, launching free.

WhatsApp Email me