ETF API -  Data with Holdings, Returns & Sectors avatar

ETF API - Data with Holdings, Returns & Sectors

Pricing

from $10.00 / 1,000 etf items

Go to Apify Store
ETF API -  Data with Holdings, Returns & Sectors

ETF API - Data with Holdings, Returns & Sectors

Real-time API access to 3,500+ European ETFs via Apify Standby Mode. Get TER, fund size, returns (1M to max), top 10 holdings with weights, sector and country breakdown per ETF. Pass an ISIN and get instant structured data. Perfect for fintech, robo-advisors and portfolio tools.

Pricing

from $10.00 / 1,000 etf items

Rating

0.0

(0)

Developer

Giovanni Bianciardi

Giovanni Bianciardi

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a day ago

Last modified

Categories

Share

📊 ETF Data API — Real-Time ETF & Fund Data

Query thousands of ETFs and funds instantly — no scraping, no waiting for a run to finish. This Actor keeps a live, always-fresh catalogue of ETF/ETP data (ISIN, price, TER, returns, risk, holdings, and more) and serves it back to you as a simple REST API, in milliseconds.

💡 Before you use this API

Some datasets like this one are already available ready-to-use on bananalitycs.com — download instantly or request custom delivery.

 

🚀 Why use this API?

For Fintech Developers: Drop ETF data straight into your app with a single HTTP call — no scraper to run, no dataset to download and refresh yourself.

For Financial Advisors & Wealth Managers: Look up or screen funds by TER, returns, or asset allocation on demand, right from a spreadsheet macro, a script, or a no-code tool.

For Researchers & Analysts: Pull the exact slice of the catalogue you need — one ISIN, a filtered list, or a sorted top-N — instead of a full dataset dump.

Unlike a typical scraper, this Actor never needs to be "run and waited on": it stays online and answers queries in real time.

🛠️ How to use it

Step 1: Start the Actor in Standby mode

Open this Actor in Apify Console and hit Start. It doesn't scrape anything on start — it just comes online and starts serving the ETF catalogue. Once it's running, open the Standby tab to find its API URL and try requests right from the browser.

Step 2: Call your API URL

Every Standby Actor gets a stable URL:

https://<actor-name>.<your-username>.apify.actor

Step 3: Authenticate

Requests need your Apify API token, either as a header:

Authorization: Bearer <APIFY_TOKEN>

or as a query parameter:

?token=<APIFY_TOKEN>

Example request

curl "https://<actor-name>.<your-username>.apify.actor/etfs?q=msci%20world&limit=5" \
-H "Authorization: Bearer <APIFY_TOKEN>"

🔎 What you can search for

You want to...Use thisExample
Look up one fundGET /etfs/{isin}/etfs/IE00B5BMR087
Search by name or ISINqq=s&p 500
Get several funds at onceisin (comma-separated)isin=IE00B5BMR087,BG9000011163
Filter by whether the fund is still activeactiveactive=true
Filter by income policydistribution_policydistribution_policy=Accumulating
Filter by replication methodreplication_methodreplication_method=Full replication
Filter by fund typeentity_typeentity_type=ETF
Filter by any numeric range (fees, returns…)min_<field> / max_<field>min_ter_pct=0&max_ter_pct=0.5
Sort the resultssort (prefix - for descending)sort=-return_1y_pct
Page through resultslimit (1–100) / offsetlimit=20&offset=40

More examples:

GET /etfs?q=msci world&active=true&sort=-fund_size_mln&limit=10
GET /etfs?min_ter_pct=0&max_ter_pct=0.2&replication_method=Full replication
GET /etfs?distribution_policy=Distributing&min_return_1y_pct=10

📤 What you get back

Each fund comes back as a rich JSON record:

CategoryFields
IdentificationISIN, name, entity type, active/inactive, profile URL
CharacteristicsFund size, TER (total expense ratio), distribution policy, replication method
PriceLatest quote, previous quote, first/latest quote date
PerformanceReturns over 1M, 3M, 6M, YTD, 1Y, 3Y, 5Y, since launch, plus each recent calendar year
Portfolio compositionTop 10 holdings, country allocation, sector allocation (each with name and weight %)

Every request returns only the fields available for that fund — no boilerplate, no need to parse an HTML page yourself.

Example: a single fund lookup

GET /etfs/IE00B5BMR087
{
"isin": "IE00B5BMR087",
"name": "iShares Core S&P 500 UCITS ETF USD (Acc)",
"entity_type": "ETF",
"active": true,
"distribution_policy": "Accumulating",
"replication_method": "Physical Full",
"fund_size_mln": 114133,
"ter_pct": 0.07,
"latest_quote": 627.29,
"latest_quote_date": "2026-03-13",
"return_1y_pct": 14.41,
"return_3y_pct": 65.24,
"return_5y_pct": 87.01,
"top_holdings_0_name": "NVIDIA Corp.",
"top_holdings_0_weight_pct": 7.38,
"countries_0_name": "United States",
"countries_0_weight_pct": 95.21,
"sectors_0_name": "Information Technology",
"sectors_0_weight_pct": 34.83,
"url": "https://www.justetf.com/it/etf-profile.html?isin=IE00B5BMR087"
}

Example: a filtered list

GET /etfs?q=msci world&sort=-fund_size_mln&limit=2
{
"total": 3,
"count": 2,
"limit": 2,
"offset": 0,
"billed_items": 2,
"is_free_tier": false,
"free_tier_remaining": null,
"items": [
{ "isin": "IE00B4L5Y983", "name": "iShares Core MSCI World UCITS ETF", "fund_size_mln": 98234, "ter_pct": 0.2 },
{ "isin": "IE00BK5BQT80", "name": "Vanguard FTSE All-World UCITS ETF", "fund_size_mln": 24211, "ter_pct": 0.22 }
]
}

💰 Pricing

This Actor uses Pay-Per-Event billing: you're only charged for the fund records you actually receive, one small charge per record — not per API call, and never for a 404 or an empty result.

  • Try it for free: every caller gets a small free preview (the first 20 ETF records) with no budget required.
  • Beyond that: allocate a Pay-Per-Event budget for the run to keep querying. Once exhausted, requests return 402 Payment Required until you top up.
  • A single call can never return more than 100 records, so a request is always billed for exactly what it returns — no surprises.

Check GET /health any time to see how many free records you have left and whether the catalogue is up to date.

🎯 Use cases

  • Portfolio dashboards — look up live fund data (fees, returns, holdings) as users add ETFs to a portfolio.
  • Robo-advisors & screening tools — filter and sort the catalogue by TER, returns, or asset class to power recommendations.
  • Client reporting — pull current fund metrics on demand instead of maintaining your own scraper.
  • Research & backtesting — fetch exactly the funds and fields you need, without downloading the entire catalogue.

🧑‍💻 For developers

The Actor also ships interactive API docs, generated from the same OpenAPI 3.1 schema used by the Standby tab in Apify Console:

  • GET /docs — Swagger UI
  • GET /redoc — ReDoc
  • GET /openapi.json — raw schema

If you're contributing to this Actor and change a route or field in src/api.py / src/models.py, regenerate the static schema before deploying:

$python scripts/generate_openapi.py