SkillAgentSearch skills...

apify-webhooks-events

'Implement Apify webhooks for Actor run notifications and event-driven

Install / Use

npx skills add jeremylongshore/tons-of-skills-marketplace --skill apify-webhooks-events

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

88/100

Category

Automation

Supported Platforms

Universal

Our assessment of apify-webhooks-events

apify-webhooks-events scores 88/100 on our quality scale, 1165th of 2,607 Automation skills we index (top 45%).

Its SKILL.md is 6.1 KB long, well organised into 14 sections with 3 code examples: a thorough specification that gives an agent plenty to work with.

With 2,785 GitHub stars, it is one of the more widely adopted skills in the catalogue.

Substance
29/30
Structure
18/20
Description
12/15
Adoption
15/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 6 days ago, so apify-webhooks-events is actively maintained.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

apify-webhooks-events compared with similar skills

All 4 of these similar skills score higher than apify-webhooks-events; compare them before choosing.

SkillScoreStarsUpdatedFormat
apify-webhooks-events (this skill)by jeremylongshore882.8k6d agoSKILL.md
Agent-Reachby Panniantong10086.3k14d agoCLAUDE.md
headroomby headroomlabs-ai10074.1ktodayCLAUDE.md
rufloby ruvnet10073.6ktodayCLAUDE.md
Scraplingby D4Vinci10084.6ktodayMCP Server

Frequently asked questions

How do I install apify-webhooks-events?
Run npx skills add jeremylongshore/tons-of-skills-marketplace --skill apify-webhooks-events. The install tabs above show the steps for each supported agent.
Which AI agents does apify-webhooks-events work with?
It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
Is apify-webhooks-events safe to use?
It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is apify-webhooks-events still maintained?
The repository was last updated 6 days ago, so apify-webhooks-events is actively maintained.

name: apify-webhooks-events description: 'Implement Apify webhooks for Actor run notifications and event-driven pipelines.

Use when setting up run completion alerts, building event-driven scraping pipelines,

or configuring ad-hoc webhooks for individual runs.

Trigger with "apify webhook", "apify events", "actor run notification",

"apify run succeeded webhook", "apify ad-hoc webhook".

' allowed-tools: Read, Write, Edit, Bash(curl:*) version: 1.5.0 license: MIT author: Jeremy Longshore jeremy@intentsolutions.io tags:

  • saas
  • scraping
  • automation
  • apify compatibility: Designed for Claude Code

Apify Webhooks & Events

Overview

Configure webhooks to receive notifications when Actor runs complete, fail, or time out. Apify supports both persistent webhooks (for all runs of an Actor) and ad-hoc webhooks (for a single run). Event-driven architecture is the recommended pattern for production Apify integrations.

Prerequisites

  • npm install apify-client in your project (and express if you build an HTTP handler)
  • An API token in APIFY_TOKEN — read it from the environment (process.env.APIFY_TOKEN) or pass Authorization: Bearer $APIFY_TOKEN on REST calls, never hard-code it
  • A public HTTPS endpoint for Apify to POST to (use ngrok while developing)
  • Familiarity with apify-sdk-patterns

Event Types

| Event | Fired When | |-------|-----------| | ACTOR.RUN.CREATED | A new Actor run starts | | ACTOR.RUN.SUCCEEDED | Run finishes with SUCCEEDED status | | ACTOR.RUN.FAILED | Run finishes with FAILED status | | ACTOR.RUN.ABORTED | Run is manually or programmatically aborted | | ACTOR.RUN.TIMED_OUT | Run exceeds its timeout | | ACTOR.RUN.RESURRECTED | A finished run is resurrected |

Instructions

Step 1: Create a Persistent Webhook

Persistent webhooks fire for every run of an Actor. Set condition.actorId, list the eventTypes you care about, and shape the delivered body with payloadTemplate:

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const webhook = await client.webhooks().create({
  eventTypes: ['ACTOR.RUN.SUCCEEDED', 'ACTOR.RUN.FAILED', 'ACTOR.RUN.TIMED_OUT'],
  condition: { actorId: 'YOUR_ACTOR_ID' },
  requestUrl: 'https://your-app.com/api/webhooks/apify',
  payloadTemplate: JSON.stringify({
    eventType: '{{eventType}}',
    actorRunId: '{{actorRunId}}',
    defaultDatasetId: '{{resource.defaultDatasetId}}',
    status: '{{resource.status}}',
    statusMessage: '{{resource.statusMessage}}',
  }),
  isAdHoc: false,
});

console.log(`Webhook created: ${webhook.id}`);

The full payload template (all run fields) and the complete variable table are in payload templates & local testing.

Step 2: Use Ad-Hoc Webhooks for Single Runs

Ad-hoc webhooks are created at run time and fire only for that specific run — pass a webhooks array when starting the Actor:

const run = await client.actor('username/my-actor').start(
  { startUrls: [{ url: 'https://example.com' }] },
  {
    webhooks: [{
      eventTypes: ['ACTOR.RUN.SUCCEEDED', 'ACTOR.RUN.FAILED'],
      requestUrl: 'https://your-app.com/api/webhooks/apify',
    }],
  },
);

The equivalent REST/curl form is in payload templates & local testing.

Step 3: Handle the Webhook

Your endpoint must return a 2xx within 30 seconds, so acknowledge immediately and process asynchronously. On SUCCEEDED, fetch the dataset via defaultDatasetId; on FAILED/TIMED_OUT, pull the run log and alert:

app.post('/api/webhooks/apify', async (req, res) => {
  res.status(200).json({ received: true }); // ack first
  try {
    await processWebhook(req.body); // switch on eventType, fetch dataset, alert
  } catch (error) {
    console.error('Webhook processing failed:', error);
  }
});

The full processWebhook switch (dataset fetch, log tail, oncall alerting) is in full implementation.

Step 4: Make Processing Idempotent, Chain Pipelines, and Manage Webhooks

Apify may deliver a webhook more than once, so dedupe on ${actorRunId}:${eventType} before doing work. You can also chain Actors (Stage 1 SUCCEEDED → start Stage 2) and manage the webhook lifecycle (list, update, delete, inspect dispatches). All three patterns — idempotent processing, event-driven pipeline, and lifecycle management — are in full implementation.

Output

  • A created webhook returns its id (persistent webhooks are visible under client.webhooks().list(); ad-hoc webhooks are scoped to one run)
  • On each matching event, Apify POSTs the rendered payloadTemplate JSON to your requestUrl
  • client.webhook(id).dispatches().list() returns the delivery history — each entry carries a status, createdAt, and the endpoint's responseStatus so you can confirm delivery or diagnose retries

Examples

  • Persistent + ad-hoc webhook creation — Steps 1 and 2 above
  • Full handler, idempotency, pipeline chaining, lifecycle management — full implementation
  • Payload template variables, REST/curl creation, and local testing with ngrok — payload templates & local testing

Error Handling

| Issue | Cause | Solution | |-------|-------|----------| | Webhook not delivered | URL unreachable | Verify HTTPS, check firewall | | Duplicate processing | Webhook retry on non-2xx | Implement idempotency | | Slow processing | Handler takes >30s | Respond 200 immediately, process async | | Missing data in payload | Wrong template vars | Check template variable spelling | | Webhook disabled | Too many failures | Re-enable in Console or via API |

Resources

Next Steps

For performance optimization, see apify-performance-tuning.

Related Skills

View on GitHub
GitHub Stars2.8k
CategoryAutomation
Updated6d ago
Forks404

Languages

Python

Trust signals

100/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

No cautions