
Congress Stock Trades Scraper
scrape.ly/store/querystone/congress-trades-scraperNewsBusiness
3 monthly users

Scrape SofaScore for any sport: live scores, fixtures and results by date, full match pages with statistics, lineups, incidents, odds and head to head, plus teams, players, tournaments, standings and search. Paste any SofaScore link. No login needed.
Get SofaScore data for every sport in clean JSON: live scores, fixtures and results by date, full match pages with statistics, lineups, incidents, odds and head to head, plus teams, players, tournaments, standings and search. Paste any SofaScore link or pick a sport and a date. No login and no API key needed.
/de/, /es/, ...).| Field | Type | What it does |
|---|---|---|
startUrls | list | Any SofaScore links. Each returns the full page data; match links also get the match details you switch on. |
liveEvents | boolean | Every match live right now in sports. |
dateFrom / dateTo | date | All matches of sports in this UTC date range (YYYY-MM-DD, today, tomorrow, yesterday; up to 31 days). |
sports | list | Sports for live and date lists. |
eventIds | list | Numeric match IDs. |
searchQueries / searchType | list / select | Find teams, players, competitions, managers or venues with their IDs. |
maxItems | integer | Most rows in the run (default 20, 0 = no limit). |
tournamentIds, statusType | filters | Keep only some competitions or match states. |
includeStatistics, includeLineups, includeIncidents, includeOdds, includeH2H, includeVotes, includeBestPlayers, includeRawData | booleans | Extra data on every match row. |
fixtures, maxFixturePages | select / integer | Past and/or upcoming matches for team, player and tournament links. |
{
"startUrls": [
"https://www.sofascore.com/football/match/atletico-madrid-real-madrid/EgbsLgb",
"https://www.sofascore.com/football/tournament/england/premier-league/17"
],
"liveEvents": true,
"dateFrom": "today",
"sports": ["football", "basketball"],
"tournamentIds": ["17", "8"],
"includeStatistics": true,
"includeOdds": true,
"maxItems": 200
}
Every row has a type:
type | Comes from | Main fields |
|---|---|---|
event | live, date, event ID and fixture lists | id, url, sport, uniqueTournament, country, season, round, startTime, status, homeTeam, awayTeam, homeScore, awayScore, winner, homeScoreDetail, awayScoreDetail, venue, referee, plus statistics, lineups, incidents, odds, h2h, votes, bestPlayers when switched on |
match | match links | id, name, summary (same fields as an event row), the page's event, eventMeta, incidents, standings properties, plus switched-on details |
team, player, tournament, manager, page | other links | id, name, sport, url and the full page data (teamDetails, players, teamTransfers, player, transfers, uniqueTournament, seasons, standings, managerDetails, ...) |
search | search | query, rank, entityType, id, name, sport, country, teamName, url, entity |
Example event row (live basketball, trimmed):
{
"type": "event",
"id": 16670594,
"url": "https://www.sofascore.com/basketball/match/bayern-munchen-anadolu-efes/pvbswwk#id:16670594",
"sport": "basketball",
"country": "International",
"uniqueTournament": "Euroleague",
"uniqueTournamentId": 138,
"season": "Euroleague 26/27",
"round": 5,
"startTime": "2026-10-14T17:30:00Z",
"status": "2nd quarter",
"statusType": "inprogress",
"homeTeam": "Anadolu Efes",
"awayTeam": "Bayern München",
"homeScore": 26,
"awayScore": 35,
"homeScoreDetail": {"current": 26, "period1": 22, "period2": 4},
"awayScoreDetail": {"current": 35, "period1": 26, "period2": 9},
"source": "live:basketball"
}
Example match row (match link, trimmed):
{
"type": "match",
"url": "https://www.sofascore.com/football/match/atletico-madrid-real-madrid/EgbsLgb",
"id": 16416339,
"sport": "football",
"name": "Atlético Madrid - Real Madrid",
"summary": {
"uniqueTournament": "LaLiga",
"round": 7,
"startTime": "2026-09-20T14:15:00Z",
"status": "Ended",
"homeTeam": "Atlético Madrid",
"awayTeam": "Real Madrid",
"homeScore": 2,
"awayScore": 1,
"winner": "home",
"venue": "Riyadh Air Metropolitano",
"referee": "Miguel Angel Ortiz Arias"
},
"event": {"...": "full SofaScore match object"},
"incidents": [{"incidentType": "goal", "time": 61, "homeScore": 1, "awayScore": 0}]
}
$1.00 per 1,000 results ($0.001 per saved row), plus the small platform usage of your run (compute at 512 MB and residential proxy traffic). Bad inputs save no row and are never charged; they are listed in failedInputs of the run's OUTPUT record.
Worked examples:
Match details (statistics, lineups, odds, ...) are included in the row price; they only add a little usage.
Is it legal to scrape SofaScore? The actor reads public pages and data that anyone can open without an account. You are responsible for how you use the data; check SofaScore's terms for your use case.
Do I need a login or a proxy? No login. A residential proxy is preselected because SofaScore blocks most datacenter addresses; it is included in the usage you pay.
How many results can I get? As many as SofaScore lists: a busy football day has about 1,500 matches, live lists hold whatever is live, search returns up to about 1,000 hits per name. Set maxItems to 0 for no limit.
Why is a field empty? SofaScore does not publish every value for every match (for example statistics before kick-off or odds for small leagues). Missing values are left out or null.
Can I schedule it or use the API? Yes. Schedule runs (for example every 5 minutes for live scores) and fetch results over the API or with webhooks and integrations.
I used another SofaScore scraper with startUrls. The same startUrls input works here and returns the page data for each link.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
startUrlsarrayOptionalSofaScore URLs
Any SofaScore link: a match, team, player, tournament, manager or a sport's date page (e.g. https://www.sofascore.com/football/2026-10-14). Language versions like /de/ work too. Each link returns the full page data.
liveEventsbooleanOptionaldefault falseLive events
Return every match that is live right now in the selected sports.
dateFromstringOptionalMatches from date
Return all fixtures and results of the selected sports from this date (UTC). Use YYYY-MM-DD, or today / tomorrow / yesterday. Up to 31 days per run.
dateTostringOptionalMatches to date
Last date (inclusive) of the range. Leave empty for a single day.
sportsarrayOptionaldefault ["football"]Sports
Sports used for live events and matches by date. Defaults to football.
eventIdsarrayOptionalEvent IDs
Numeric SofaScore match IDs (the number after #id: in a match link).
searchQueriesarrayOptionalSearch
Names to look up: teams, players, competitions, managers or venues. Each result carries its SofaScore ID and link.
searchTypeenumOptionaldefault "all"Search type
Which kind of entity the search returns.
maxItemsintegerOptionaldefault 20Maximum results
Most rows to save in the whole run. 0 means no limit.
Narrow down live, date and fixture lists.
tournamentIdsarrayOptionalOnly these competitions
Unique tournament IDs (e.g. 17 = Premier League, 8 = LaLiga, 7 = Champions League). Matches from other competitions are skipped.
statusTypeenumOptionaldefault "any"Match status
Keep only matches in this state.
Extra data added to every match row (one extra request each).
includeStatisticsbooleanOptionaldefault falseMatch statistics
Possession, shots, xG, passes, duels and more.
includeLineupsbooleanOptionaldefault falseLineups
Formations, starters, substitutes and player ratings.
includeIncidentsbooleanOptionaldefault falseIncidents
Goals, cards, substitutions and period scores in order.
includeOddsbooleanOptionaldefault falseOdds
Pre-match and live betting markets (fractional odds).
includeH2HbooleanOptionaldefault falseHead to head
Wins, draws and losses between the two teams and managers.
includeVotesbooleanOptionaldefault falseFan votes
Who will win votes from SofaScore users.
includeBestPlayersbooleanOptionaldefault falseBest players
Top-rated players of each side and the player of the match.
includeRawDatabooleanOptionaldefault falseRaw match object
Also attach the complete SofaScore match object to each match row.
fixturesenumOptionaldefault "none"Fixtures for team, player and tournament links
Also list matches of every team, player or tournament link as separate rows (current season for tournaments).
maxFixturePagesintegerOptionaldefault 1Fixture pages
Pages of fixtures per link and direction (about 10 to 30 matches per page).
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
Residential proxies are used by default because SofaScore blocks most datacenter addresses.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| type | any | Row kind: event, match, team, player, tournament, manager, page or search |
| id | any | SofaScore ID |
| url | any | SofaScore link |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Result | One row saved to the dataset: a match, a SofaScore page or a search hit. Error rows are free. | $0.001 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('querystone/sofascore-scraper').call({
"startUrls": [
"https://www.sofascore.com/football/match/atletico-madrid-real-madrid/EgbsLgb",
"https://www.sofascore.com/tennis/player/djokovic-novak/14882",
"https://www.sofascore.com/football/tournament/england/premier-league/17"
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run querystone/sofascore-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=querystone/sofascore-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Find teams by name.
Statistics, lineups and incidents for a match URL.
Recent fixtures from a tournament URL.
Player profile and recent matches from a player URL.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.