Bloomberg Media Scraper
Pricing
from $1.20 / 1,000 media snapshot chargeds
Bloomberg Media Scraper
Get trending video/audio and live-TV schedule from Bloomberg. Talks directly to Bloomberg's own mobile app API, no login needed. Split from the mature, published bloomberg-all-in-one-api for a focused, single-purpose workflow.
What does Bloomberg Media Scraper do?
Bloomberg Media Scraper fetches the Media tab's trending video list, trending audio/podcast list, and live-TV schedule + currently-airing event detail for a chosen Bloomberg live-TV lineup — all four calls run in parallel and merged into a single dataset row per run.
It talks directly to the same internal API the official Bloomberg Android app uses (cdn-mobapi.bloomberg.com), reverse-engineered live against a real device with no API key or account needed. This is the media slice of Bloomberg All-in-One API, split out as its own focused Actor.
Why use Bloomberg Media Scraper?
- No auth, no signature, no session — confirmed live via a real device + Frida (bypassing the app's dual TLS cert pinning and root detection), then independently re-confirmed by calling the API directly from a plain server with no device involved. Only a fixed
user-agentheader is required. - Genuinely hard-to-find traffic, confirmed real. This Media tab traffic (trending video/audio, live-TV schedule/event) is sent by the app over an already-open HTTP/1.1 keep-alive socket via a raw HTTP client, not through the usual OkHttp Request builder. Three independent traffic-capture methods — an HTTP-client Request-builder hook, a native
connect()syscall hook, and rawtcpdump— all showed zero relevant requests. It only surfaced when hooking one layer deeper, at the TLS socket's plaintext write (Conscrypt'sSSLOutputStream), before encryption. It is a real API call, not bundled local data. - Four calls, one row — trending videos, trending audio, live schedule, and live event detail, fetched in parallel
- Use cases: media-tab monitoring, live-TV schedule tracking, trending content dashboards
Input
| Field | Type | Description |
|---|---|---|
lineup | string | Required. Live-TV lineup: ASIA_LINEUP or ASIA_EVENT_LINEUP. Default ASIA_LINEUP. |
includeVideosTrending | boolean | Fetch the Media tab's trending video list. Default true. |
includeAudiosTrending | boolean | Fetch the Media tab's trending audio/podcast list. Default true. |
includeLiveSchedule | boolean | Fetch the upcoming/current live-TV show schedule for lineup. Default true. |
includeLiveEvent | boolean | Fetch the currently-airing live-TV event detail for lineup. Default true. |
Example:
{"lineup": "ASIA_LINEUP","includeVideosTrending": true,"includeAudiosTrending": true,"includeLiveSchedule": true,"includeLiveEvent": true}
Output
One dataset row per run:
{"lineup": "ASIA_LINEUP","videosTrending": { "...": "trending video list" },"audiosTrending": { "...": "trending audio/podcast list" },"liveSchedule": { "...": "upcoming/current show schedule" },"liveEvent": { "...": "currently-airing event detail" }}
A field is omitted (undefined) if its include* flag was set to false, or set to { "error": "..." } if that sub-call failed — a failure in one sub-call never crashes the whole run.
Known limitations
- Only
ASIA_LINEUPandASIA_EVENT_LINEUPare confirmed working lineup values. Other guessed names found in the app's bundled code (AUS_LINEUP,PHOENIX_US_LINEUP,POLITICS_LINEUP,PAN_EUROPE_EVENT) all return HTTP 400 upstream and are rejected before the request is even made. - A failed sub-call (e.g. an unexpected 400/500, such as no currently-airing event) is captured as
{ "error": "..." }in that field rather than crashing the run.
Pricing
Pay-per-event: $0.0015 per media-snapshot result (FREE plan; BRONZE/SILVER/GOLD/PLATINUM/DIAMOND get automatic discounts based on your Apify plan). One billed event per run (a single dataset row).