RDAP Domain Expiry Monitor
Pricing
from $9.00 / 1,000 results
RDAP Domain Expiry Monitor
Track domain expirations and ownership changes via RDAP to catch dropped URLs, monitor competitor assets, and protect your organic search equity.
RDAP Domain Monitor API | Ownership, Expiry & Registrar Signals
Extract crucial domain registration data to protect your brand assets and discover lucrative SEO opportunities. This RDAP domain monitor extracts exact expiration timestamps, nameserver updates, and registrar details, providing a faster, more reliable alternative to legacy WHOIS tools. Whether you are managing a massive portfolio of websites or tracking competitor URLs, you can schedule recurring checks to automatically see when domains change hands or are about to expire. SEO professionals and digital marketers rely on this scraper to track high-value targets across the web. By configuring a daily or weekly schedule, you can catch dropped domains the moment they become available, giving you a distinct advantage in search rankings and backlink acquisition. Missing a renewal can destroy years of organic search equity, making this an essential defensive tool as well. You can run the monitor across up to 500 URLs at once and review the scraped results to identify precise expiration dates, ownership statuses, and a historical summary of changes for every tracked domain. Use this reliable web scraper to automate your domain intelligence pipeline without dealing with severe rate limits or outdated databases.
Store Quickstart
- Start with
store-input.example.jsonfor a low-friction dataset run on two well-known domains. - If that matches your workflow, switch to
store-input.templates.jsonand pick one of:Starter Quickstart (2 Domains -> Baseline + Renewal Summary)for first-run validationPortfolio Watch (Recurring Dataset)for larger domain listsRenewal Watchlist (Expiry-focused Recurring)when expiry retention is the main concernWebhook Renewal Queue (Action-needed Handoff)for expiry or ownership change automation
Key Features
- 🔍 Bulk domain lookup — Check up to 500 domains per run
- 🔄 Change detection — Automatically detects registrar, nameserver, expiry date, and status changes between runs
- ⏰ Expiry warnings — Get alerted when domains expire within your configured threshold
- 🪝 Webhook notifications — Send results to Slack, Discord, or any webhook endpoint
- 📊 Structured JSON output — Clean, consistent data ready for spreadsheets or databases
- 🛡️ Zero anti-bot risk — RDAP is an open protocol; no CAPTCHAs, no blocks
Use Cases
| Who | Why |
|---|---|
| Domain investors | Monitor portfolio expiry dates and competitor domain changes |
| Brand protection teams | Detect unauthorized registrar transfers or nameserver hijacking |
| IT/Security teams | Track domain configuration changes across your organization |
| M&A due diligence | Verify domain ownership and registration history |
Input
| Field | Type | Default | Description |
|---|---|---|---|
| domains | array | prefilled | List of domain names to check via RDAP (e.g. ['example.com', 'example.org']). Maximum 500 per run. |
| checkOwnership | boolean | true | Detect registrant/nameserver changes between runs. |
| expiryWarningDays | integer | 30 | Alert when domain expires within this many days. This also drives renewal-pressure severity and the recommended monitori |
| delivery | string | "dataset" | Where to send results. 'dataset' keeps the first run lightweight and snapshot-friendly, while 'webhook' sends the same s |
| webhookUrl | string | — | Required when delivery is 'webhook'. Receives JSON payload of results. |
| snapshotKey | string | "rdap-domain-snapshots" | Key for persisting previous lookup results. Reuse the same value across recurring runs to preserve the baseline, enable |
| concurrency | integer | 3 | Number of parallel RDAP lookups. Keep low to avoid rate limiting. |
| dryRun | boolean | false | Skip saving snapshots and sending webhooks. |
Input Example
{"domains": ["example.com", "github.com", "google.com"],"expiryWarningDays": 30,"checkOwnership": true,"delivery": "dataset","snapshotKey": "rdap-domain-monitor-snapshots","concurrency": 3}
Output
| Field | Type | Description |
|---|---|---|
meta | object | |
results | array | |
results[].domain | string | |
results[].status | string | |
results[].rdap | object | |
results[].changes | array | |
results[].warnings | array | |
results[].checkedAt | timestamp | |
results[].error | null |
Output Example
{"meta": {"generatedAt": "2026-03-29T10:15:00.000Z","expiryWarningDays": 30,"totals": {"total": 2,"ok": 2,"changed": 0,"expiring": 1,"errors": 0},"severityCounts": {"critical": 0,"high": 1,"watch": 0,"info": 0},"alertCount": 1,"executiveSummary": {"overallStatus": "attention_needed","brief": "1 of 2 domains need renewal attention. Highest-pressure issue: Domain expires in 12 days","recommendedCadence": "daily","totals": {"total": 2,"initial": 2,"ok": 0,"changed": 0,"expiring": 1,"expired": 0,"errors": 0,"actionNeeded": 1},"topDomains": [{"domain": "github.com","status": "initial","severity": "high","brief": "Domain expires in 12 days"}],
API Usage
Run this actor programmatically using the Apify API. Replace YOUR_API_TOKEN with your token from Apify Console → Settings → Integrations.
cURL
curl -X POST "https://api.apify.com/v2/acts/taroyamada~rdap-domain-monitor/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{ "domains": ["example.com", "github.com", "google.com"], "expiryWarningDays": 30, "checkOwnership": true, "delivery": "dataset", "snapshotKey": "rdap-domain-monitor-snapshots", "concurrency": 3 }'
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("taroyamada/rdap-domain-monitor").call(run_input={"domains": ["example.com", "github.com", "google.com"],"expiryWarningDays": 30,"checkOwnership": true,"delivery": "dataset","snapshotKey": "rdap-domain-monitor-snapshots","concurrency": 3})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('taroyamada/rdap-domain-monitor').call({"domains": ["example.com", "github.com", "google.com"],"expiryWarningDays": 30,"checkOwnership": true,"delivery": "dataset","snapshotKey": "rdap-domain-monitor-snapshots","concurrency": 3});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Tips & Limitations
- Keep concurrency ≤ 5 when auditing production sites to avoid WAF rate-limit triggers.
- Use webhook delivery for recurring cron runs — push only deltas to downstream systems.
- Enable
dryRunfor cheap validation before committing to a paid cron schedule. - Results are dataset-first; use Apify API
run-sync-get-dataset-itemsfor instant JSON in CI pipelines. - Run a tiny URL count first, review the sample, then scale up — pay-per-event means you only pay for what you use.
FAQ
Is there a rate limit?
Built-in concurrency throttling keeps requests polite. For most public APIs this actor can run 1–10 parallel requests without issues.
What happens when the input URL is unreachable?
The actor records an error row with the failure reason — successful URLs keep processing.
Can I schedule recurring runs?
Yes — use Apify Schedules to run this actor on a cron (hourly, daily, weekly). Combine with webhook delivery for change alerts.
Does this actor respect robots.txt?
Yes — requests use a standard User-Agent and honor site rate limits. For aggressive audits, set a higher concurrency only on your own properties.
Can I integrate with Google Sheets or Airtable?
Use webhook delivery with a Zapier/Make/n8n catcher, or call the Apify REST API from Apps Script / Airtable automations.
Related Actors
URL/Link Tools cluster — explore related Apify tools:
- 🔗 URL Health Checker — Bulk-check HTTP status codes, redirects, SSL validity, and response times for thousands of URLs.
- 🔗 Broken Link Checker — Crawl websites to find broken links, 404 errors, and dead URLs.
- 🔗 URL Unshortener — Expand bit.
- 🏷️ Meta Tag Analyzer — Analyze meta tags, Open Graph, Twitter Cards, JSON-LD, and hreflang for any URL.
- 📚 Wayback Machine Checker — Check if URLs are archived on the Wayback Machine and find closest snapshots by date.
- Sitemap Analyzer API | sitemap.xml SEO Audit — Analyze sitemap.
- Schema.org Validator API | JSON-LD + Microdata — Validate JSON-LD and Microdata across multiple pages, score markup quality, and flag missing or malformed Schema.
- Site Governance Monitor | Robots, Sitemap & Schema — Recurring robots.
- Domain Security Audit API | SSL Expiry, DMARC, Domain Expiry — Summary-first portfolio monitor for SSL expiry, DMARC/SPF/DKIM, domain expiry/ownership, and security headers with remediation-ready outputs.
Cost
Pay Per Event:
actor-start: $0.01 (flat fee per run)dataset-item: $0.003 per output item
Example: 1,000 items = $0.01 + (1,000 × $0.003) = $3.01
No subscription required — you only pay for what you use.
⭐ Was this helpful?
If this actor saved you time, please leave a ★ rating on Apify Store. It takes 10 seconds, helps other developers discover it, and keeps updates free.
Bug report or feature request? Open an issue on the Issues tab of this actor.