FIFA World Cup 2026 - Real-Time Events Notifications 🔥 Free avatar

FIFA World Cup 2026 - Real-Time Events Notifications 🔥 Free

Pricing

Pay per usage

Go to Apify Store
FIFA World Cup 2026 - Real-Time Events Notifications 🔥 Free

FIFA World Cup 2026 - Real-Time Events Notifications 🔥 Free

Free ⚽ World Cup 2026 live alerts straight to your webhook! Goals 🎯 (scorer + assist when available), cards, subs, kickoff/HT/FT & more!. One setup, real-time JSON POSTs all tournament long - no polling, no F5. Paste your webhook URL & never miss a moment! 🏆

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Azzouzana

Azzouzana

Maintained by Community

Actor stats

3

Bookmarked

36

Total users

9

Monthly active users

9 days ago

Last modified

Share

⚽ World Cup 2026 — Real-Time Events Notifications

Hook up your app, bot, or automation to live match pings for World Cup 2026. This setup actor is the one-time “where should we send stuff?” step.

What you get 🔔

Once you’re in, your webhook gets instant POST notifications when the action hits the pitch:

  • ⚽ Goals (scorer + assist when available)
  • 🟨🟥 Cards (Red/Yellow)
  • 🔄 Substitutions
  • ⏱️ Match phases — kickoff, HT, 2nd half, FT, stoppage time

No polling. No F5 spam. Events land on your URL as they happen.

Discord? Paste a channel webhook URL — the stream actor formats each update as a ready-to-post content message (goals, cards, subs, HT/FT).

Live examples on Webhook.site

Real POSTs from the delivery service during live WC26 — open the inbox to inspect full JSONs: https://webhook.site/#!/view/01b18b65-2625-4129-88f1-3ca2cdfe0615

Each notification is a separate POST.

How it works (5 seconds setup)

  1. Create a free Apify account
  2. Run this actor with your webhook URL
  3. Optional: check Send test payload — dummy goal POST to confirm delivery
  4. We save it next to your Apify account
  5. Our delivery service fires live JSON during live matches

One setup run → notifications in the background all tournament long. Free. Easy.

Input

The Apify form has two sections: Webhook delivery (URL + test ping) and Notification events (what to send).

FieldDefaultDescription
webhookUrlHTTPS endpoint — Discord, Webhook.site, or your API (required)
testWebhooktrueSend a dummy goal POST now to verify whether your endpoint is reachable
subscribeGoalstrueGoals (scorer + assist when available)
subscribeYellowCardsfalseYellow cards
subscribeRedCardsfalseRed cards
subscribePeriodsfalseMatch phases — kickoff, HT, 2nd half, FT, stoppage time
subscribeSubstitutionsfalseSubstitutions
{
"webhookUrl": "https://your-server.com/notifications/wc26",
"testWebhook": true,
"subscribeGoals": true,
"subscribeYellowCards": false,
"subscribeRedCards": true,
"subscribePeriods": false,
"subscribeSubstitutions": true
}

Node, Python, Zapier, Make, n8n — if it accepts POST, you’re good. Discord works too — paste a channel webhook URL and the stream actor formats messages for you.

Setup test ping

When testWebhook is checked (default on), the setup actor POSTs one dummy notification — A similar shape to a real goal, marked test: true:

{
"test": true,
"message": "Ready to receive World Cup chaos!",
"channel": "test",
"match": "Test Home FC vs Test Away FC",
"summary": {
"kind": "test",
"type": "goal",
"text": "Ready to receive World Cup chaos! — Test Player 0' (assist Test Assist) (1-0)",
"score": { "home": 1, "away": 0 }
}
}

Discord receives { "content": "⚽ Ready to receive World Cup chaos! — …" }. Setup still succeeds if the ping fails — check run output testWebhook.ok.

Output (dataset)

Successful run = one confirmation row:

{
"subscriptionId": "uuid",
"apifyUserId": "your-apify-user-id",
"webhookUrl": "https://your-server.com/notifications/wc26",
"eventTypes": {
"goals": true,
"yellowCards": false,
"redCards": true,
"periods": false,
"substitutions": true
},
"updatedAt": "2026-06-11T12:00:00.000Z",
"testWebhook": {
"sent": true,
"ok": true,
"status": 200
}
}

Changing your URL

  • One slot per Apify user
  • Run again with a new URL → we swap it in
  • No duplicate subscriptions cluttering things

What a notification looks like 📬

During live World Cup matches, the delivery service POSTs to your webhookUrl.

  • Discord (discord.com/api/webhooks/...) → { "content": "..." } — formatted.
  • Everything else → full JSON payload below

HTTP request

POST /notifications/wc26 HTTP/1.1
Host: your-server.com
Content-Type: application/json
{ ... body below ... }

You only receive event types you enabled at setup (subscribeGoals, subscribeYellowCards, etc.). If you left only Goals checked, you will not get cards or subs.

Below: JSON shapes from live delivery. For raw POSTs with timestamps, see the Webhook.site inbox.

Goal (with scorer + assist)

Live delivery — Canada vs Bosnia & Herzegovina (event 15186836):

{
"ts": "2026-06-12T20:59:02.379Z",
"eventId": 15186836,
"subject": "event.15186836",
"channel": "incidents",
"incidentId": 351558696,
"homeTeam": "Canada",
"awayTeam": "Bosnia & Herzegovina",
"match": "Canada vs Bosnia & Herzegovina",
"summary": {
"kind": "goal",
"type": "goal",
"class": "regular",
"side": "away",
"team": "Bosnia & Herzegovina",
"minute": 21,
"player": "J. Lukić",
"assist": "S. Kolašinac",
"text": "Goal — J. Lukić 21' (assist S. Kolašinac) (0-1)",
"score": { "home": 0, "away": 1 }
},
"team": "Bosnia & Herzegovina",
"player": "J. Lukić",
"assist": "S. Kolašinac"
}

Earlier WC26 example — Mexico vs South Africa (event 15186710):

{
"ts": "2026-06-11T19:14:50.813Z",
"eventId": 15186710,
"subject": "event.15186710",
"channel": "score",
"homeTeam": "Mexico",
"awayTeam": "South Africa",
"match": "Mexico vs South Africa",
"summary": {
"kind": "goal",
"side": "home",
"team": "Mexico",
"score": "1-0",
"player": "J. Quiñones",
"assist": "E. Lira",
"minute": 9,
"text": "Goal — J. Quiñones 9' (assist E. Lira) (1-0)"
},
"patch": {
"homeScore.current": 1,
"awayScore.current": 0
},
"incidentId": 351455858,
"player": "J. Quiñones",
"assist": "E. Lira"
}

summary.text is ready to forward to Discord, Slack, or SMS as-is.

Red card

{
"ts": "2026-06-11T20:16:38.921Z",
"eventId": 15186710,
"subject": "event.15186710",
"channel": "incidents",
"incidentId": 125277734,
"homeTeam": "Mexico",
"awayTeam": "South Africa",
"match": "Mexico vs South Africa",
"summary": {
"kind": "red",
"type": "card",
"class": "red",
"side": "away",
"team": "South Africa",
"minute": 49,
"player": "S. Sithole",
"text": "red — S. Sithole 49'"
},
"team": "South Africa",
"player": "S. Sithole"
}

Yellow card

Live delivery — Canada vs Bosnia & Herzegovina:

{
"ts": "2026-06-12T19:46:42.144Z",
"eventId": 15186836,
"subject": "event.15186836",
"channel": "incidents",
"incidentId": 125279344,
"homeTeam": "Canada",
"awayTeam": "Bosnia & Herzegovina",
"match": "Canada vs Bosnia & Herzegovina",
"summary": {
"kind": "yellow",
"type": "card",
"class": "yellow",
"side": "away",
"team": "Bosnia & Herzegovina",
"minute": 45,
"player": "E. Demirović",
"text": "yellow — E. Demirović 45'"
},
"team": "Bosnia & Herzegovina",
"player": "E. Demirović"
}

Substitution

playerIn / playerOut appear only on substitutions. Live delivery — Canada vs Bosnia & Herzegovina:

{
"ts": "2026-06-12T20:22:12.251Z",
"eventId": 15186836,
"subject": "event.15186836",
"channel": "incidents",
"incidentId": 126397427,
"homeTeam": "Canada",
"awayTeam": "Bosnia & Herzegovina",
"match": "Canada vs Bosnia & Herzegovina",
"summary": {
"kind": "substitution",
"type": "substitution",
"class": "regular",
"side": "home",
"team": "Canada",
"minute": 61,
"text": "Sub — L. Millar → J. Shaffelburg 61'",
"playerIn": "J. Shaffelburg",
"playerOut": "L. Millar"
},
"team": "Canada",
"playerIn": "J. Shaffelburg",
"playerOut": "L. Millar"
}

Match phases (kickoff → HT → 2H → FT)

Enable subscribePeriods for whistle-to-whistle milestones. One POST per phase change. Same top-level shape as goals and cards: homeTeam, awayTeam, match, and a readable summary.text.

Momentsummary.phasesummary.text example
First halffirst_halfFirst half — Mexico vs South Africa (0-0)
HalftimehalftimeHalftime — Mexico vs South Africa (1-0)
Second halfsecond_halfSecond half — Mexico vs South Africa (1-0)

Full time — webhook JSON sample:

{
"ts": "2026-06-17T22:00:37.794Z",
"eventId": 15186504,
"subject": "event.15186504",
"channel": "score",
"summary": {
"kind": "status",
"type": "period",
"phase": "full_time",
"text": "Full time — England vs Croatia (4-2)",
"score": {
"home": 4,
"away": 2
},
"status": {
"code": 100,
"description": "Ended"
}
},
"homeTeam": "England",
"awayTeam": "Croatia",
"match": "England vs Croatia"
}

Halftime — webhook JSON sample:

{
"ts": "2026-06-11T19:55:00.676Z",
"eventId": 15186710,
"subject": "sport.football",
"channel": "score",
"homeTeam": "Mexico",
"awayTeam": "South Africa",
"match": "Mexico vs South Africa",
"summary": {
"kind": "status",
"type": "period",
"phase": "halftime",
"text": "Halftime — Mexico vs South Africa (1-0)",
"score": { "home": 1, "away": 0 },
"status": { "code": 31, "description": "Halftime" }
}
}

Stoppage time uses summary.kind: "stoppage_time" with minutes and period (1 or 2).

Other phases use the same shape: first_half, second_half, extra_time, penalties.

Field cheat sheet

FieldMeaning
tsWhen we sent the notification (ISO 8601)
eventIdMatch id — stable for the whole game
channelscore (live socket) or incidents (API enrich for cards/subs)
summary.kindgoal, yellow, red, substitution, status, stoppage_time, …
summary.typegoal, card, substitution, or period for match phases
summary.phasePeriod only: first_half, halftime, second_half, full_time, stoppage_time, …
summary.textHuman-readable one-liner
summary.score{ "home": 1, "away": 0 } on goals and periods
player / assistScorer and assist on goals; player on cards
playerIn / playerOutSubstitution only

You’re live when…

Delivery kicks in once your URL is on the notification service. Changed URL or event toggles? Picked up within about 5 minutes (no restart needed).

Want to try it? Plug in your webhook, open your logs, and wait for the beautiful chaos of live World Cup football. 🏆


📬 Contact & Support

Need a custom solution? Have a feature request, a collaboration beyond the FIFA 2026 World Cup or just want to chat? We'd love to hear from you!