Apify tells you if your scraper ran. Datasource Pulse tells you if it worked — catching empty results, schema drift, stale data, and quota exhaustion before they corrupt your pipeline. One alert when something degrades, one notice when it recovers.
Enterprise / managed onboarding. Supply only this token; your full connector manifest is loaded from the operator's private KV store. Leave blank for Mode A (self-serve) where you configure checks directly below.
Type:string
Connector checks (Mode A — self-serve)
checks
Optional
Array of connector checks to run; billed $0.02 per item. Each item is ONE of two object shapes.
CREDENTIAL CHECK — { "type": "credential", "id": string (unique key), "label": string (human name), "vendor": one of ["serpapi","apify","hunter","openai","anthropic","twitter","reddit","github","stripe","resend","producthunt","gemini","groq","mistral","cohere","perplexity","together","openrouter","firecrawl","exa","tavily","brightdata","scrapingbee","zenrows","elevenlabs","deepgram","assemblyai","replicate","huggingface","pinecone","supabase","airtable","stackexchange","google_oauth","youtube","serper","brave","generic_http"], + credential fields for that vendor.
ACTOR CHECK — { "type": "actor", "id": string (unique key), "label": string, "actorId": string (e.g. "clockworks~tiktok-scraper"), "apifyToken": string (Actor read+run-read scope), "enableVolumeBaseline": boolean, "enableCostBaseline": boolean, optional "stalenessThresholdDays": int (default 30), "volumeDropPct": int (default 30), "costSpikePct": int (default 50) }.
Set enableVolumeBaseline/enableCostBaseline to false when each run uses different inputs (varying queries), or you will get false alarms. Optional on BOTH shapes: "impact": string (max 200 chars) — what breaks downstream when this connector fails; echoed verbatim in every alert so the operator's first question ("what breaks?") is answered in the alert itself. Optional on CREDENTIAL checks: "quotaSoftCap": number — YOUR OWN budget line in the vendor's native usage unit (searches for serpapi, USD for apify/openrouter, requests for hunter, credits for firecrawl/scrapingbee, characters for elevenlabs, API calls for tavily/stackexchange); quota warnings and the 100%-crossed warning state are evaluated against your cap, with the vendor-account percentage always shown alongside.
See README for per-vendor examples.
Type:array
Recheck only these connector ids (subset recheck)
onlyConnectorIds
Optional
On-demand subset recheck for preflight gates: when set, ONLY the listed connector ids (from your checks array, or from your managed manifest in Mode B) are probed and billed this run — e.g. recheck a single credential immediately before an expensive job instead of paying for the full roster. Unknown ids fail the run before any connector is charged. Leave empty for a full run. Works in both Mode A and Mode B.
Type:array
Alert email address
emailTo
Optional
Email address to receive state-change alerts. Leave blank to skip email alerts.
Type:string
Webhook URL (Slack, Discord, or any HTTP endpoint)
webhookUrl
Optional
Webhook endpoint that receives a JSON POST on every state transition. The default body is a Slack/Discord-compatible notification card; set webhookFormat to "json" for a raw structured event body instead.
Type:string
Webhook signing secret (optional)
webhookSecret
Optional
When set, every webhook POST includes X-DP-Signature: sha256=, so your receiver can verify the alert genuinely came from Datasource Pulse.
Type:string
Webhook body format
webhookFormat
Optional
"slack" (default) posts a Slack/Discord-compatible notification card — pick this when a person reads the alerts in a chat channel. "json" posts the raw structured event object with top-level fields transition, connector_id, connector_label, failure_class, message, last_healthy_at, occurred_at, recommended_action, impact (present when the check declares one), and metadata — pick this when a program consumes your alerts and indexes them by field. X-DP-Signature signs the raw body in both formats.
Type:string
Default:slack
Options:
slackjson
Require {"ok":true} webhook acknowledgement
webhookExpectJsonOk
Optional
When enabled, a 2xx webhook response must carry the JSON body {"ok":true} to count as delivered. Guards against catch-all 200 pages (framework fallback routes) silently swallowing alerts. Leave off for Slack/Discord — they acknowledge with plain "ok".
Type:boolean
Default:false
Quota warning threshold (%)
quotaWarningPct
Optional
Fire a warning alert when a credential's usage exceeds this percentage of its quota limit. Default: 80.