ETL Job Monitoring

ETL job monitoring for missed data pipeline runs.

PingCron alerts you when scheduled ETL jobs, imports, exports, and data syncs stop checking in — before stale data reaches a dashboard.

5 monitors free · No credit card · Live in under 60 seconds

Stale data is the most common ETL failure no one notices.

An ETL job that doesn't run usually doesn't crash loudly. The dashboard still loads. The CSV export still has data — just yesterday's data. The CRM still has customer records — just records that haven't been synced since Tuesday. Reports run on what's in the warehouse, and what's in the warehouse is whatever the last successful pipeline left there.

Data pipelines fail for predictable reasons that don't surface until someone notices the numbers feel off. A source API rotated its credentials. A schema change broke a transform halfway through. The destination database hit a connection limit and your job silently retried itself to death. A scheduled Airflow DAG was paused by accident and stayed paused for six weeks.

By the time someone says "these numbers look wrong", the gap is days or weeks deep — and the audit trail of when things went stale is buried in logs no one is reading.

How ETL jobs go silent:

  • Source API credentials expired — extraction returns empty results, no error
  • Schema change broke a transform halfway, so partial loads keep "succeeding"
  • Destination warehouse hit a connection limit; jobs retry until they give up
  • Airflow / Dagster scheduler paused the DAG and no one re-enabled it
  • Cron entry for the nightly sync was removed during a deploy, never noticed
  • Pipeline runs but skips records due to a quietly-caught exception

Setup

Wrap any ETL run in one ping.

Whether the pipeline is a shell script, a Python job, or an Airflow task, the integration is one HTTP call after the work completes.

Before

0 * * * * /scripts/sync-customers.sh

After

0 * * * * /scripts/sync-customers.sh && curl -fsS https://api.pingcron.io/ping/abc123

PingCron expects a check-in on the schedule you set (hourly, every 30 minutes, daily, etc.). If the pipeline stops checking in past the grace period, you get an alert.

Real-world examples

Python ETL script

import requests

PING_URL = 'https://api.pingcron.io/ping/abc123'

def run_etl():
    extract_from_api()
    transform()
    load_into_warehouse()

try:
    run_etl()
    requests.get(PING_URL, timeout=10)
except Exception:
    requests.get(PING_URL + '/fail', timeout=10)
    raise

Hourly warehouse sync from cron

0 * * * * cd /opt/etl && python sync_warehouse.py && curl -fsS https://api.pingcron.io/ping/abc123

CSV export job (any language)

30 4 * * * /usr/local/bin/export_customers.sh > /exports/customers.csv && curl -fsS https://api.pingcron.io/ping/abc123

ETL and data sync jobs to monitor.

Any scheduled pipeline whose freshness matters.

Customer data imports

Nightly imports from CRMs, billing systems, or partner APIs.

Warehouse syncs

Hourly loads into Snowflake, BigQuery, Redshift, or Postgres.

CSV exports

Scheduled reports for finance, analytics, or downstream partners.

API data pulls

Periodic fetches from third-party APIs into your stack.

Dashboard refresh jobs

Materialized view refreshes, BI tool extracts, dbt model runs.

Nightly transformations

Cleaned tables built every night that downstream jobs depend on.

CRM syncs

Two-way HubSpot, Salesforce, Pipedrive sync jobs.

Reporting pipelines

Finance reports, marketing attribution, ops digests.

How it works

Four steps. About a minute total.

01

Create an ETL monitor

Name the pipeline. PingCron generates a unique ping URL.

02

Match the interval to your schedule

Hourly for incremental syncs, daily for nightly loads, every 15m for near-real-time pipelines. Set a grace period that covers your slowest expected run.

03

Ping after the load step succeeds

Use && in cron, or call the URL from inside Python after the load step completes.

04

Get alerted when freshness slips

Email, Slack, Discord, or webhook the moment a check-in is missed.

Alerts where you'll actually see them.

Configure as many channels as you want per monitor.

Email

HTML alerts with monitor details and direct links.

Slack

Post to any Slack channel via incoming webhook.

Discord

Native Discord webhook integration.

Custom webhooks

POST alerts to any endpoint with full payload.

FAQ

ETL job monitoring is the practice of verifying that scheduled extract-transform-load pipelines actually run on schedule. Each successful pipeline run pings a unique URL. If the ping doesn't arrive on time, you get alerted — meaning data freshness slipped and downstream dashboards or reports are running on stale data.
PingCron expects a check-in at a regular interval. Successful pipeline runs ping the URL. If the pipeline crashed, was paused, lost source credentials, or just didn't run at all, no ping arrives. After the grace period elapses, PingCron sends you an alert.
Yes. Set the schedule to '1h' with a grace period that covers a typical run plus some buffer. If your hourly pipeline usually finishes in 10 minutes, a 20-minute grace period is reasonable. Long-running hourly jobs may need 30–45 minutes of grace.
Yes. Set the schedule to '1d' and add a grace period long enough to cover the longest expected run. If a nightly warehouse load typically takes 90 minutes but occasionally takes 3 hours, set the grace period to 3.5 hours so a slow run doesn't trigger a false alert.
That's exactly when you want to know. If the pipeline crashes before reaching the success ping, PingCron simply doesn't receive it, and an alert fires after the grace period. For instant alerts, wrap the pipeline in try/except and ping /fail in the error handler.
Yes. Add a Slack incoming webhook URL in your notification settings. When an ETL monitor goes down or recovers, PingCron posts to the configured channel. You can route different pipelines to different Slack channels — for example, marketing data to #data-marketing and finance pipelines to #data-finance.
No, and we don't claim to be. Tools like Monte Carlo, Bigeye, and Datafold do data observability — schema drift, anomaly detection, freshness on the row level, lineage. PingCron does one specific thing: it tells you when a scheduled job stops running. For most teams, that's the highest-value first check to put in place — and it costs $0 instead of thousands per month.
Yes. 5 monitors free with email, Slack, and Discord alerts. No credit card. Enough to monitor your most critical pipelines before deciding to upgrade.

Related monitoring guides

Stop letting stale data reach your dashboards unnoticed.

One ping at the end of every pipeline. Get alerted the moment a run is missed.

Start monitoring free

5 monitors free · No credit card · Live in under 60 seconds