ESPN News Scraper avatar

ESPN News Scraper

Pricing

from $2.99 / 1,000 news

Go to Apify Store
ESPN News Scraper

ESPN News Scraper

Read public ESPN news feeds across 16 leagues and return normalized article records or fail-closed access diagnostics.

Pricing

from $2.99 / 1,000 news

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

ESPN News

ESPN News reads public ESPN league news feeds and writes normalized article records to an Apify dataset. It uses direct HTTPS requests to ESPN's public site API and, when requested, one bounded request to each accessible non-premium ESPN article page. It does not bypass logins, paywalls, CAPTCHAs, geographic restrictions, device checks, WAFs, or other access controls.

The default public feed is the ESPN NBA news API. The Actor supports 16 public league codes: nba, nfl, mlb, nhl, mls, wnba, ncaam, ncaaw, ncaaf, epl, laliga, ucl, bundesliga, seriea, ligue1, and ligamx.

Input

  • leagues (required array): one or more supported league codes.
  • teams (optional array): public team abbreviations or ESPN numeric IDs. At most 25 are accepted.
  • fetchFullBody (optional boolean): include cleaned visible body text only when a public, non-premium article page is accessible.
  • maxItems (optional integer): maximum article records across all requested feeds, from 1 to 10,000. Each feed request is capped at 100 articles.
  • fixtureFile (optional string): local QA-only JSON fixture path inside the Actor directory. Omit it for public-source runs.

Unknown fields, invalid league codes, malformed filters, and out-of-range limits are rejected. No proxy, login, email, private endpoint, or browser-bypass input is accepted.

Dataset contract

Normal rows contain business article data and source provenance only:

{
"recordType": "espn-news-article",
"sourceName": "ESPN public site API",
"sourceKind": "public-espn-api",
"sourceUrl": "https://site.api.espn.com/apis/site/v2/sports/basketball/nba/news?limit=10",
"articleId": "49854792",
"league": "nba",
"sport": "basketball",
"articleType": "article",
"headline": "Public article headline",
"description": "Public article summary when supplied",
"published": "2026-09-07T10:45:59.000Z",
"url": "https://www.espn.com/nba/story/_/id/49854792/example",
"premium": false,
"scrapedAt": "2026-09-08T00:00:00.000Z"
}

Optional business fields include lastModified, byline, allowComments, selected images, categories, keywords, videoCount, public team fields, inputTeam, and bodyText.

Every diagnostic row is exactly four fields:

{
"url": "https://site.api.espn.com/apis/site/v2/sports/basketball/nba/news?limit=1",
"error": "The public source rate-limited the request; no records were collected. (HTTP 429)",
"errorCode": "RATE_LIMITED",
"scrapedAt": "2026-09-08T00:00:00.000Z"
}

Diagnostics are fail-closed evidence of an unavailable or restricted source, not article records. No diagnostic wrapper, HTTP status, retry count, execution status, or request metadata is written into a business row. A run that collected earlier article rows before a later source failure is marked PARTIAL in the run summary.

Run artifacts

OUTPUT_SUMMARY and its compatibility alias OUTPUT contain run-level counts and status. SOURCE_METADATA records the public source boundary and whether the run used a local fixture. These operational details stay in the key-value store rather than in dataset business rows.

Statuses are SUCCESS, PARTIAL, DIAGNOSTIC, or ERROR. Counts include article rows, exact diagnostic rows, duplicate articles removed, attempted feeds, and body pages collected.

Local verification

npm ci
npm test
npm run lint
npm run schema
npm run validate

For deterministic QA, run the Actor from a disposable copy with input such as:

{
"leagues": ["nba"],
"teams": ["FBK"],
"fetchFullBody": true,
"maxItems": 2,
"fixtureFile": "fixtures/news.json"
}

The fixture is not live evidence. A public run must use the ESPN feed and report its observed source URL. If ESPN returns an access-control response, the Actor emits the exact diagnostic shape and does not invent replacement content.

Cost and responsible use

Metadata-only runs use one sequential public feed request per league/filter. Body mode adds one bounded article-page request per selected article. Start with a small limit and respect ESPN's terms, robots/access signals, applicable law, and the rights of people represented in public content.