Bloomberg Scraper avatar

Bloomberg Scraper

Under maintenance

Pricing

$20.00 / 1,000 results

Go to Apify Store
Bloomberg Scraper

Bloomberg Scraper

Under maintenance

Extract real-time quotes, historical OHLCV, financial statements, and news directly from Bloomberg. No Terminal required, fully structured for AI & Quant.

Pricing

$20.00 / 1,000 results

Rating

0.0

(0)

Developer

RD.Galih Rakasiwi

RD.Galih Rakasiwi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Bloomberg Financial Data API

Institutional-Grade Bloomberg Financial Data — No Terminal Required


TL;DR — Start this Actor, wait ~60 seconds for the container to boot, and you get a full REST API serving Bloomberg-quality financial data. Real-time quotes, historical OHLCV, financial statements, Bloomberg News with sentiment, FIGI identifier mapping, and built-in LLM prompt templates. Free tier works with zero API keys — just hit Start.


Table of Contents

  1. What You Get
  2. How It Works
  3. How We Handle Stability & Anti-Bot
  4. Feature Matrix
  5. Start the Actor
  6. Input Configuration
  7. Output — What You'll See After Start
  8. Enriched Response Samples
  9. Integration Snippets
  10. Saved Task Examples
  11. Disclaimer

What You Get

When you press Start, the Actor boots a FastAPI server inside an Apify container. You get a live REST API with:

CapabilityDescription
Swagger UIInteractive API docs — click "Try it out" right from your browser
OpenAPI 3.0 SpecMachine-readable spec — generate typed clients in any language
57 REST EndpointsQuotes, financials, news, identifiers, market data, LLM prompts
Auto Anti-BotPerimeterX bypass handled automatically — no manual cookie management
3-Tier FallbackBloomberg REST → Bloomberg Web → OpenFIGI — always returns data
LLM-Ready OutputStructured JSON + 7 built-in prompt templates for AI financial agents
Zero-Config StartNo API keys required — OpenFIGI + public web data work out of the box

How It Works

┌───────────────────────────────────────────────────┐
│ APIFY RUN │
│ │
│ Start Actor ──▶ Container Boots (~60s)
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────┐ │
│ │ FASTAPI SERVER (:8000) │ │
│ │ │ │
│ │ /api/v1/price/quote/AAPL │ │
│ │ /api/v1/financials/MSFT/all │ │
│ │ /api/v1/news/latest │ │
│ │ /api/v1/identifier/resolve/TSLA │ │
│ │ /api/v1/prompts/investment-report?ticker=AAPL│ │
│ │ /api/v1/market/snapshot │ │
│ │ ...57 endpoints total │ │
│ │ │ │
│ │ Behind the scenes: │ │
│ │ ┌──────────────────────────────────┐ │ │
│ │ │ Bloomberg REST ──▶ Bloomberg Web│ │ │
│ │ │ │ │ │ │ │
│ │ │ ▼ ▼ │ │ │
│ │ │ (paid sub) (auto-auth │ │ │
│ │ │ browser) │ │ │
│ │ │ │ │ │ │
│ │ │ ▼ │ │ │
│ │ │ ┌──────────┐ │ │ │
│ │ │ │ OpenFIGI │◀─┤ │ │
│ │ │ │ (always │ │ │ │
│ │ │ │ free) │ │ │ │
│ │ │ └──────────┘ │ │ │
│ │ └──────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ ▲ Your code calls this Actor's URL │
│ https://YOUR-RUN.apify.actor/api/v1/... │
└───────────────────────────────────────────────────┘

No polling. No file downloads. No webhook parsing. You call a REST endpoint, you get JSON back — just like any production API. The run stays alive and serves requests until you stop it.


How We Handle Stability & Anti-Bot

Bloomberg deploys PerimeterX (PX), a sophisticated anti-bot system that fingerprint-binds session tokens to the exact browser that solved its JavaScript challenge. Extracting cookies and replaying them through httpx or curl will always fail — the TLS/JA3 fingerprint, header order, and canvas hash no longer match.

Our Approach: Persistent Browser as API Proxy

The Actor launches a headless Chromium browser at startup and keeps it alive for the entire run. All data requests flow through page.evaluate()fetch() — the request originates from the same browser that holds the valid PX session. The fingerprint is consistent. PerimeterX sees a normal browser.

Resilience Stack — 6 Layers of Defense

#LayerMechanismWhat It Prevents
1Auto-AuthLogin + PX challenge solved at container boot; session refreshed every 10 minutesManual cookie management; session expiration
2Stealth ProfilePersistent browser context — spoofs navigator.webdriver, navigator.plugins, window.chrome, canvas fingerprintPerimeterX detection on every request
3Token-Bucket Rate LimiterConfigurable burst: 20–200 req/min per data source429 throttling; IP bans
4Exponential Backoff + JitterTenacity — 1s → 30s retry, 3 attemptsTransient network failures
5Circuit Breaker5 consecutive failures → 60s open with automatic half-open probeCascading failure; resource exhaustion
6Graceful DegradationREST → Web → OpenFIGI priority chain. Returns partial data with source metadataTotal data loss — the API never fully fails

Self-Healing Flow

Container Boot ──▶ auto-auth() ──▶ success? ──yes──▶ Serving Requests
no (rare in headless)
Request → 403 blocked?recover_session() → success? ──yes──▶ continue
no → fallback to OpenFIGI
API stays up

Every 10 minutes the session is proactively refreshed. If a request returns 403 mid-run, recovery is attempted automatically before falling back. You never touch browser sessions or cookies.


Feature Matrix

#ActionEndpointAuth
GETFind Instruments/api/v1/search/instruments?query=Apple&exch_code=USNone
GETFind Companies/api/v1/search/company?query=Microsoft&limit=10None
GETFind News/api/v1/search/news?ticker=AAPL&categories=Markets,EarningsWeb

Price — Real-Time & Historical

#ActionEndpointAuth
GETSingle Quote/api/v1/price/quote/AAPLWeb
POSTBatch Quotes (≤50)/api/v1/price/quotes?tickers=AAPL,MSFT,GOOGLWeb
GETHistorical OHLCV/api/v1/price/historical/AAPL?period=2y&interval=1dREST/Web
GETIntraday Candles/api/v1/price/intraday/SPY?interval=5&hours_back=8Web

Company

#ActionEndpointAuth
GETProfile/api/v1/company/AAPL/profileWeb
GETFull + Key Metrics/api/v1/company/MSFT/fullWeb
GETPeer Group/api/v1/company/TSLA/peersWeb
POSTSide-by-Side Compare/api/v1/company/compare?tickers=AAPL,MSFT,GOOGLWeb

Market

#ActionEndpointAuth
GETFull Market Snapshot/api/v1/market/snapshotWeb
GETIndex Detail/api/v1/market/index/SPXWeb
GETTop Movers/api/v1/market/movers?category=gainers&limit=10Web
GETSector Performance/api/v1/market/sectorsWeb

Financial Statements

#ActionEndpointAuth
GETIncome Statement/api/v1/financials/AAPL/income?period=quarterlyREST/Web
GETBalance Sheet/api/v1/financials/MSFT/balance?period=annualREST/Web
GETCash Flow/api/v1/financials/TSLA/cashflow?period=ttmREST/Web
GETAll Three Statements/api/v1/financials/JPM/all?period=annualREST/Web

News & Sentiment

#ActionEndpointAuth
GETLatest Headlines/api/v1/news/latest?page_size=20Web
GETFull Article Body/api/v1/news/article?article_url=...Web
GETNews by Ticker/api/v1/news/ticker/AAPLWeb
GETNews by Category/api/v1/news/category/EarningsWeb

Identifiers (OpenFIGI — Always Free)

#ActionEndpointAuth
GETResolve Ticker → Full Details/api/v1/identifier/resolve/AAPLNone
GETMap Any ID → FIGI/api/v1/identifier/map?id_type=ISIN&id_value=US0378331005None
GETTicker → FIGI/api/v1/identifier/figi/AAPLNone

LLM Prompt Templates

#TemplateEndpoint
GETEquity Research Summary/api/v1/prompts/summarize-company?ticker=AAPL
GETMulti-Company Comparison/api/v1/prompts/compare-companies?tickers=AAPL,MSFT,GOOGL
GETMarket Strategy Brief/api/v1/prompts/analyze-market-trend
GETFull Investment Report/api/v1/prompts/investment-report?ticker=TSLA
GETDaily News Roundup/api/v1/prompts/daily-news-summary
GETPrice Movement Analysis/api/v1/prompts/price-movement?ticker=NVDA
GETRisk Profile Assessment/api/v1/prompts/risk-analysis?ticker=JPM

Each prompt endpoint returns a structured prompt + list of suggested follow-up API calls. Feed directly into GPT-4, Claude, or any LLM.


Start the Actor

Option 1 — Zero Config (Free Tier)

  1. Click Start on this Actor's page
  2. Wait ~60 seconds for the container to boot
  3. Open the Swagger UI link from the Output tab
  4. Start calling endpoints — OpenFIGI identifiers and public web data work with no API keys

Same as above. The browser auto-authenticates to Bloomberg's public web tier — no credentials needed. You get real-time quotes, company profiles, market snapshots, and news.

Option 3 — With Bloomberg REST Subscription

Fill in the optional input fields with your Bloomberg API credentials to unlock full reference data, historical financials, and higher rate limits:

{
"bloombergClientId": "YOUR_BBG_CLIENT_ID",
"bloombergClientSecret": "YOUR_BBG_CLIENT_SECRET",
"openfigiApiKey": "YOUR_OPENFIGI_KEY"
}

Input Configuration

All fields are optional — the Actor works with zero configuration. The free data tier is always available.

FieldTypeDefaultDescription
openfigiApiKeystring(empty)OpenFIGI API key for higher rate limits. Free — register at openfigi.com
bloombergClientIdstring(empty)Bloomberg REST API client ID — requires Bloomberg subscription
bloombergClientSecretstring(empty)Bloomberg REST API client secret
bloombergJwtSecretstring(empty)Bloomberg JWT signing secret for API authentication
redisUrlstringredis://localhost:6379/0Redis connection URL for response caching
guiModebooleanfalseRun browser with visible UI — improves PerimeterX pass rate on GPU-enabled plans
logLevelselectINFOLogging verbosity — DEBUG, INFO, WARNING, ERROR
portinteger8000Internal API server port

Input JSON preview (as configured in Apify Console):

{
"openfigiApiKey": "",
"bloombergClientId": "",
"bloombergClientSecret": "",
"bloombergJwtSecret": "",
"redisUrl": "redis://localhost:6379/0",
"guiMode": false,
"logLevel": "INFO",
"port": 8000
}

Output — What You'll See After Start

Once the container is running, the Output tab in Apify Console shows these live links:

LinkWhat It Is
Swagger UIInteractive API documentation — browse all endpoints and test calls directly
OpenAPI SpecMachine-readable openapi.json — generate SDKs with OpenAPI Generator
ReDocClean, readable alternative API docs
Health CheckVerify the server is alive — {"status":"ok","version":"2.0.0"}

Use the container URL as your API base — every run gets its own subdomain:

https://YOUR-RUN-ID.apify.actor/api/v1/...

Enriched Response Samples

Every response follows a consistent envelope:

GET /api/v1/price/quote/AAPL

{
"status": "success",
"quote": {
"ticker": "AAPL",
"price": 228.17,
"change": 2.83,
"change_pct": 1.26,
"bid": 228.15,
"ask": 228.20,
"open": 226.00,
"previous_close": 225.34,
"day_high": 229.10,
"day_low": 225.80,
"volume": 48320000,
"avg_volume_10d": 52000000,
"market_cap": 3480000000000,
"fifty_two_week_high": 260.10,
"fifty_two_week_low": 164.08,
"timestamp": "2026-08-09T14:30:00Z",
"is_delayed": true,
"delay_minutes": 15,
"exchange": "NASDAQ",
"currency": "USD"
}
}

GET /api/v1/financials/AAPL/income?period=annual

{
"status": "success",
"ticker": "AAPL",
"period": "annual",
"income_statements": [
{
"ticker": "AAPL",
"period": "annual",
"fiscal_year": 2025,
"period_end_date": "2025-09-30",
"currency": "USD",
"revenue": 394328000000,
"cost_of_revenue": 220000000000,
"gross_profit": 174328000000,
"operating_income": 120328000000,
"net_income": 98528000000,
"eps_basic": 6.45,
"eps_diluted": 6.38,
"ebitda": 134000000000,
"gross_margin": 0.442,
"operating_margin": 0.305,
"net_margin": 0.250,
"shares_basic": 15270000000,
"shares_diluted": 15450000000
}
]
}

GET /api/v1/market/snapshot

{
"status": "success",
"snapshot": {
"timestamp": "2026-08-09T14:30:00Z",
"indices": [
{ "ticker": "SPX", "name": "S&P 500", "last_price": 5983.45, "price_change_pct": 0.74 },
{ "ticker": "NDX", "name": "Nasdaq 100", "last_price": 21056.32, "price_change_pct": 0.91 },
{ "ticker": "DJI", "name": "Dow Jones", "last_price": 42310.18, "price_change_pct": 0.32 }
],
"sector_performance": [
{ "sector": "Technology", "change_pct": 1.5 },
{ "sector": "Financials", "change_pct": -0.3 }
],
"treasury_yields": { "2Y": 3.98, "10Y": 4.15 },
"vix": 14.8
}
}

Error Envelope (All Endpoints)

{
"status": "error",
"ticker": "INVALID$$",
"message": "Unable to resolve ticker symbol"
}

Integration Snippets

Replace YOUR-RUN-ID with the run ID from Apify Console, or use the container URL from the Output tab.

Python — Portfolio Price Check

import asyncio
import httpx
BASE = "https://YOUR-RUN-ID.apify.actor/api/v1"
async def check_portfolio():
async with httpx.AsyncClient(timeout=30) as client:
resp = await client.post(f"{BASE}/price/quotes", params={
"tickers": "AAPL,MSFT,GOOGL,AMZN,NVDA,META,TSLA"
})
data = resp.json()
for q in data["quotes"]:
print(f"{q['ticker']}: ${q['price']:.2f} ({q['change_pct']:+.2f}%)")

Python — Pipe Market Data to an LLM

import asyncio
import httpx
BASE = "https://YOUR-RUN-ID.apify.actor/api/v1"
async def market_briefing_for_llm():
async with httpx.AsyncClient(timeout=30) as client:
snapshot, prompt = await asyncio.gather(
client.get(f"{BASE}/market/snapshot"),
client.get(f"{BASE}/prompts/analyze-market-trend"),
)
return {
"data": snapshot.json()["snapshot"],
"system_prompt": prompt.json()["prompt"],
# Send both to your LLM of choice
}

Python — Full Equity Research Pipeline

import asyncio
import httpx
BASE = "https://YOUR-RUN-ID.apify.actor/api/v1"
async def equity_deep_dive(ticker: str):
async with httpx.AsyncClient(timeout=30) as client:
profile, company, peers, financials, news, prompt = await asyncio.gather(
client.get(f"{BASE}/company/{ticker}/profile"),
client.get(f"{BASE}/company/{ticker}/full"),
client.get(f"{BASE}/company/{ticker}/peers"),
client.get(f"{BASE}/financials/{ticker}/all", params={"period": "annual"}),
client.get(f"{BASE}/news/ticker/{ticker}", params={"page_size": 5}),
client.get(f"{BASE}/prompts/investment-report", params={"ticker": ticker}),
)
return {
"profile": profile.json()["profile"],
"metrics": company.json()["data"],
"peers": peers.json()["data"],
"financials": financials.json(),
"recent_news": news.json()["articles"],
"llm_prompt": prompt.json()["prompt"],
}

cURL — Quick Start

# Health check
curl -s https://YOUR-RUN-ID.apify.actor/health | jq
# Single quote
curl -s "https://YOUR-RUN-ID.apify.actor/api/v1/price/quote/AAPL" | jq
# Batch quotes
curl -s -X POST \
"https://YOUR-RUN-ID.apify.actor/api/v1/price/quotes?tickers=AAPL,MSFT,NVDA" | jq
# Historical OHLCV (2 years, weekly bars)
curl -s "https://YOUR-RUN-ID.apify.actor/api/v1/price/historical/AAPL?period=2y&interval=1wk" \
| jq '.bars[:4]'
# Full financial statements
curl -s "https://YOUR-RUN-ID.apify.actor/api/v1/financials/MSFT/all?period=annual" | jq

Saved Task Examples

Pre-configured Actor inputs you can save in Apify Console for one-click reuse.

Task 1 — "Free Tier Quick Start"

Zero API keys. Uses only OpenFIGI identifier mapping and public web data. Ideal for first-time evaluation.

{
"openfigiApiKey": "",
"logLevel": "INFO",
"port": 8000
}

Use for: FIGI mapping, basic instrument search, evaluating the Actor before committing credentials.


Task 2 — "Bloomberg Web Access — Full Data"

No subscription needed. Enables real-time quotes, financial statements, market snapshots, and news through browser-based web access. guiMode: true significantly improves PerimeterX pass rate.

{
"openfigiApiKey": "YOUR_FREE_OPENFIGI_KEY",
"guiMode": true,
"logLevel": "INFO",
"port": 8000
}

Use for: Daily market briefings, portfolio tracking, equity research, news aggregation.


Task 3 — "Institutional — Bloomberg REST + Cache"

Full Bloomberg REST API with Redis caching for production workloads. Unlocks maximum rate limits and complete reference data.

{
"openfigiApiKey": "YOUR_OPENFIGI_KEY",
"bloombergClientId": "YOUR_BBG_CLIENT_ID",
"bloombergClientSecret": "YOUR_BBG_CLIENT_SECRET",
"bloombergJwtSecret": "YOUR_BBG_JWT_SECRET",
"redisUrl": "redis://your-redis-host:6379/0",
"guiMode": true,
"logLevel": "DEBUG",
"port": 8000
}

Use for: High-frequency data pipelines, production trading support systems, institutional research automation.


Disclaimer

This Actor does not redistribute Bloomberg L.P. proprietary data. All data is fetched in real-time from publicly accessible endpoints and the OpenFIGI API (a Bloomberg-owned open standard). Users with Bloomberg subscriptions may configure their own API credentials for access to licensed data.

  • Bloomberg®, Bloomberg Terminal®, and BLOOMBERG PROFESSIONAL® are trademarks and service marks of Bloomberg Finance L.P.
  • FIGI® and OpenFIGI® are registered trademarks of Bloomberg Finance L.P.
  • This project is not affiliated with, endorsed by, or sponsored by Bloomberg Finance L.P. or The Open Group.

Users are responsible for ensuring their use of this Actor complies with Bloomberg's terms of service and any applicable data licensing agreements.