Verified 2026-11-06 from Meta docs and one day of production use (Graph API v25.0, system user token, app with no end users).
- Meta's rate-limit page states Business Discovery and Hashtag Search are subject to Platform Rate Limits, not the Instagram BUC
4800 x impressionsformula:Calls within one hour = 200 * Number of Users, where Users is the app's daily active users (https://developers.facebook.com/docs/graph-api/overview/rate-limiting). An internal tooling app with a system-user token and no logged-in users therefore sits near the floor (~200 calls per rolling hour), andtotal_cputime/total_timepercentages inx-app-usagecan bind beforecall_countwhen each call expandsmedia.limit(20){caption,...}. Observed: 36-107 profile lookups per hour before reaching 80% of the reported usage. - Batch requests do not raise the ceiling: "Each call within the batch is counted separately for the purposes of calculating API call limits and resource limits" (https://developers.facebook.com/docs/graph-api/batch-requests). They only cut HTTP round trips.
- Persist the
x-app-usage/x-business-use-case-usageJSON after every call (the window is rolling, so the next process starts blind otherwise) and compute a resume time from your own call timestamps rather than sleeping a full hour. - At hundreds of profiles per day, a pay-per-result scraper is the practical bulk path: Sideshift Scraper
profile-detailsis 1 credit ($1.50 per 1K, 120 req/min token bucket, confirmed 404s are billed, 5xx refunded; https://docs.sideshift.app/scraper/billing-and-limits.md), Apifyapify/instagram-profile-scraperis $2.30-2.60 per 1K profiles with 12 latest posts and comment/like counts (https://apify.com/apify/instagram-profile-scraper). ~700 profile pulls cost about $1-2 either way versus five one-hour stalls on Business Discovery. Keep Business Discovery for what the scrapers lack: 20-50 posts withmedia_product_typein one free call for a shortlist.