Domain Expiry & SEO Monitor avatar

Domain Expiry & SEO Monitor

Pricing

from $9.00 / 1,000 results

Go to Apify Store
Domain Expiry & SEO Monitor

Domain Expiry & SEO Monitor

Track domain expiration dates, registrar details, and ownership shifts to secure digital assets or catch dropped domains for your SEO portfolio.

Pricing

from $9.00 / 1,000 results

Rating

0.0

(0)

Developer

ๅคช้ƒŽ ๅฑฑ็”ฐ

ๅคช้ƒŽ ๅฑฑ็”ฐ

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

2 days ago

Last modified

Share

RDAP Domain Monitor API | Ownership + Expiry

Monitor domain registration data via RDAP and track expiry, registrar, nameserver, and ownership changes in structured rows.

Store Quickstart

  • Start with store-input.example.json for a low-friction dataset run on two well-known domains.
  • If that matches your workflow, switch to store-input.templates.json and pick one of:
    • Starter Quickstart (2 Domains -> Baseline + Renewal Summary) for first-run validation
    • Portfolio Watch (Recurring Dataset) for larger domain lists
    • Renewal Watchlist (Expiry-focused Recurring) when expiry retention is the main concern
    • Webhook 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

WhoWhy
Domain investorsMonitor portfolio expiry dates and competitor domain changes
Brand protection teamsDetect unauthorized registrar transfers or nameserver hijacking
IT/Security teamsTrack domain configuration changes across your organization
M&A due diligenceVerify domain ownership and registration history

Input

FieldTypeDefaultDescription
domainsarrayprefilledList of domain names to check via RDAP (e.g. ['example.com', 'example.org']). Maximum 500 per run.
checkOwnershipbooleantrueDetect registrant/nameserver changes between runs.
expiryWarningDaysinteger30Alert when domain expires within this many days. This also drives renewal-pressure severity and the recommended monitori
deliverystring"dataset"Where to send results. 'dataset' keeps the first run lightweight and snapshot-friendly, while 'webhook' sends the same s
webhookUrlstringโ€”Required when delivery is 'webhook'. Receives JSON payload of results.
snapshotKeystring"rdap-domain-snapshots"Key for persisting previous lookup results. Reuse the same value across recurring runs to preserve the baseline, enable
concurrencyinteger3Number of parallel RDAP lookups. Keep low to avoid rate limiting.
dryRunbooleanfalseSkip 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

FieldTypeDescription
metaobject
resultsarray
results[].domainstring
results[].statusstring
results[].rdapobject
results[].changesarray
results[].warningsarray
results[].checkedAttimestamp
results[].errornull

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 ApifyClient
client = 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 dryRun for cheap validation before committing to a paid cron schedule.
  • Results are dataset-first; use Apify API run-sync-get-dataset-items for 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.

URL/Link Tools cluster โ€” explore related Apify tools:

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.