eToro APIetoro.com ↗
Access eToro trader profiles, portfolio holdings, performance stats, CopyTrader rankings, trending assets, instrument details, and news via a structured JSON API.
What is the eToro API?
This API exposes 11 endpoints covering eToro's trading platform data, from CopyTrader rankings to individual instrument market data. Use get_top_traders to pull paginated leaderboard results sorted by gain or copier count, or call get_trader_portfolio to inspect a trader's open positions broken down by instrument type and stock industry. Response fields include UserName, RiskScore, Copiers, AggregatedPositions, winRatio, and more.
curl -X GET 'https://api.parse.bot/scraper/ffe0735e-7f42-4080-818c-97545b07e55c/get_top_traders?page=1&sort=-gain&period=LastTwoYears&page_size=20' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace etoro-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.etoro_api import EToro, TraderSort, RankingPeriod, TradeHistoryPeriod
etoro = EToro()
# Search for top traders sorted by gain over the last two years
for trader in etoro.traders.search(sort=TraderSort.GAIN, period=RankingPeriod.LAST_TWO_YEARS, limit=5):
print(trader.username, trader.gain, trader.country, trader.risk_score)
# Get the trader's portfolio
portfolio = trader.portfolio()
for position in portfolio.aggregated_positions:
print(position.instrument_id, position.direction, position.invested, position.net_profit)
# Get trade history for the last year
history = trader.trades_history(period=TradeHistoryPeriod.ONE_YEAR_AGO)
print(history.all.total_trades, history.all.win_ratio, history.all.avg_profit_pct)
# Search for instruments and drill into details
for instrument in etoro.instruments.search(query="Tesla", limit=3):
print(instrument.symbol, instrument.name, instrument.type, instrument.exchange)
# Get detailed market data
detail = instrument.details()
print(detail.display_name, detail.instrument_type)
print(detail.market_data.price_data.price, detail.market_data.price_data.delta_percent)
# Get news for this instrument
for article in instrument.news():
print(article.title, article.source, article.date)
# Get trending stocks and cryptos
stocks = etoro.markets.trending_stocks()
for asset in stocks.trending:
print(asset.display_name, asset.price, asset.delta_percent)
cryptos = etoro.markets.trending_cryptos()
for asset in cryptos.daily_raisers:
print(asset.display_name, asset.delta_percent)
Fetch list of top/popular investors from eToro's CopyTrader rankings. Returns paginated results sorted by the specified field over the given time period. Each trader includes gain, risk score, copiers count, country, and trading activity metrics.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| sort | string | Sort field for ranking. |
| period | string | Time period for ranking calculation. |
| page_size | integer | Number of results per page. |
{
"type": "object",
"fields": {
"Items": "array of trader summary objects with UserName, Gain, RiskScore, Copiers, Country, and many trading metrics",
"Status": "string indicating request status (e.g. 'OK')",
"TotalRows": "integer total number of matching traders"
},
"sample": {
"data": {
"Items": [
{
"Gain": 11100.57,
"Trades": 70,
"Copiers": 2,
"Country": "Germany",
"FullName": "Alfred Balolong Ceralde",
"UserName": "puds05",
"WinRatio": 35.71,
"DailyGain": -0.35,
"RiskScore": 5,
"CustomerId": 13262688
}
],
"Status": "OK",
"TotalRows": 32424
},
"status": "success"
}
}About the eToro API
Trader Data
The trader-focused endpoints give structured access to eToro's public investor data. get_top_traders accepts sort values of -gain or -copierscount and a period of LastYear or LastTwoYears, returning an array of trader summaries with fields like UserName, Gain, RiskScore, Copiers, and Country, plus a TotalRows count for pagination. get_trader_profile returns a dataComponentsResponse array covering components such as Stats, About, and SimilarTraders for a given username. get_trader_stats goes deeper, returning Performance, PortfolioRisk, TradingStats, AdditionalStats, and CopiersStats components.
Portfolio and Trade History
get_trader_portfolio returns a trader's live positions as AggregatedPositions objects — each with InstrumentID, Direction, Invested, NetProfit, and Value — plus breakdowns by AggregatedPositionsByStockIndustryID and AggregatedPositionsByInstrumentTypeID. An empty AggregatedPositions array is a valid response for traders with no open positions. get_trader_trades_history accepts a period of oneYearAgo or sixMonthsAgo and returns aggregate stats (totalTrades, winRatio, avgProfitPct, avgLossPct) alongside a per-asset breakdown in the assets array. get_trader_chart provides monthly and yearly gain history with gain percentage and a simulation flag for each data point.
Instrument and Market Data
get_instrument_details takes a ticker symbol such as AAPL or BTC and returns marketData (containing priceData, priceHistory, and financialData), instrumentType, dailyRaisers, dailyFallers, and a trending array of related instruments. get_instrument_news returns up to 3 recent articles per symbol with title, url, source, date, and time fields. get_trending_stocks and get_trending_cryptos each return trending, dailyRaisers, and dailyFallers arrays with instrumentId, displayName, price, and deltaPercent.
Search
search_instruments accepts a keyword query and returns an instruments array with fields including symbol, name, type, exchange, country, isinCode, sector, industry, and images. The total field indicates the full match count. This endpoint covers stocks, crypto, ETFs, and other instrument types available on eToro.
The eToro API is a managed, monitored endpoint for etoro.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when etoro.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official etoro.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a CopyTrader screening tool that filters top investors by gain percentage and risk score using get_top_traders.
- Track a trader's portfolio allocation across instrument types by parsing AggregatedPositionsByInstrumentTypeID from get_trader_portfolio.
- Compute win/loss ratios across asset classes by pulling per-asset stats from get_trader_trades_history.
- Display a historical gain chart for any eToro trader using monthly and yearly data from get_trader_chart.
- Monitor daily crypto movers by reading dailyRaisers and dailyFallers from get_trending_cryptos.
- Power an instrument search feature with symbol, sector, industry, and ISIN data from search_instruments.
- Aggregate recent market news for a watchlist of tickers by calling get_instrument_news for each symbol.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.