{
  "openapi": "3.0.1",
  "info": {
    "title": "Expiring Domains Finder — Expired Domain List & SEO",
    "description": "Find expiring and expired domains by date, TLD and keyword, with registrar, WHOIS dates, backlinks, referring domains and organic traffic. No login.",
    "version": "1.0",
    "x-build-id": "47fmcRfQmV1ocMF7t"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cheapapi~expiring-domains-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cheapapi-expiring-domains-finder",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/cheapapi~expiring-domains-finder/runs": {
      "post": {
        "operationId": "runs-sync-cheapapi-expiring-domains-finder",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/cheapapi~expiring-domains-finder/run-sync": {
      "post": {
        "operationId": "run-sync-cheapapi-expiring-domains-finder",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "expiringWithinDays": {
            "title": "Expiring within (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "List domains whose registration expires between today and this many days from now. Use 0 together with the date range in the advanced section (for example to find domains that expired recently).",
            "default": 30
          },
          "tlds": {
            "title": "TLDs",
            "type": "array",
            "description": "Domain extensions to include, without the dot (com, net, org, io, co.uk …). Leave empty for all TLDs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords in domain",
            "maxItems": 50,
            "type": "array",
            "description": "Leave empty to include all domain names. Only domains that contain at least one of these texts, e.g. \"shop\", \"store\", \"crypto\" (any keyword may match). Letters, digits, hyphens and dots. Each keyword counts as one filter condition; if they do not fit into the 8-condition limit, they are combined into one pattern automatically. Change how they match under Advanced → Keyword match.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 63,
              "pattern": "^[^\\s%_]{1,63}$"
            },
            "default": []
          },
          "maxResults": {
            "title": "Maximum domains",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "How many domains to return (1–100,000). Each 1,000 domains is one list request.",
            "default": 100
          },
          "onlyNewDomains": {
            "title": "Only new domains since the last run",
            "type": "boolean",
            "description": "For scheduled runs: skip every domain this search already delivered in an earlier run. Skipped repeats are not saved again but cost $0.0015 each (they had to be fetched and checked), and every list request costs $0.16 even if nothing new is found. Request sizes adapt to the share of new domains, so repeats stay cheap. Unless you set \"Maximum domains to check\", at most 200 domains (or \"Maximum domains\" if higher) are checked per run, so a run where nothing is new costs at most about $0.62. The history is kept per filter set (same filters = same history) in your account's key-value store \"expiring-domains-monitor\".",
            "default": false
          },
          "monitoringName": {
            "title": "Monitoring name",
            "pattern": "^[A-Za-z0-9_ .-]+$",
            "minLength": 1,
            "maxLength": 100,
            "type": "string",
            "description": "Optional. Give the history a name to keep it when you change filters, or to run several independent feeds. Leave empty to keep one history per filter set."
          },
          "maxScannedDomains": {
            "title": "Maximum domains to check",
            "minimum": 100,
            "maximum": 100000,
            "type": "integer",
            "description": "Only with \"Only new domains\" or \"Minimum domain score\": how many domains of the sorted list are checked at most to find ones to deliver (100–100,000). Leave empty for automatic: with \"Only new domains\" 200 (or \"Maximum domains\" if higher), a protective default so a run where nothing is new costs at most about $0.62; with only a minimum score, twice \"Maximum domains\", at least 1,000."
          },
          "minReferringDomains": {
            "title": "Minimum referring domains",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Only domains linked from at least this many different websites. The best single quality signal for expired domains. Leave empty for no minimum."
          },
          "minBacklinks": {
            "title": "Minimum backlinks",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Only domains with at least this many backlinks in total. Leave empty for no minimum."
          },
          "minDofollowBacklinks": {
            "title": "Minimum dofollow backlinks",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Only domains with at least this many dofollow backlinks. Leave empty for no minimum."
          },
          "minReferringMainDomains": {
            "title": "Minimum referring root domains",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Only domains linked from at least this many different root domains (subdomains counted once). Leave empty for no minimum."
          },
          "minOrganicTraffic": {
            "title": "Minimum organic traffic",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Only domains with at least this estimated monthly organic search traffic (visits from Google). Leave empty for no minimum."
          },
          "minOrganicKeywords": {
            "title": "Minimum organic keywords",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Only domains that still rank in Google for at least this many keywords. Leave empty for no minimum."
          },
          "minOrganicTrafficValue": {
            "title": "Minimum organic traffic value (USD)",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "number",
            "description": "Only domains whose organic traffic would cost at least this much per month as ads. Leave empty for no minimum."
          },
          "minDomainScore": {
            "title": "Minimum domain score (0–100)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only domains whose domainScore (0–100, calculated by the Actor from referring domains, backlinks, organic traffic and domain age; formula in the README) is at least this value. Applied after fetching, so it does not use one of the 8 filter conditions. Each fetched domain skipped for a lower score costs $0.0018 (it had to be fetched and checked); every list request pays the $0.16 request fee, even if no domain passes. Use free database minimums such as \"Minimum referring domains\" first. Leave empty for no minimum and no extra fee."
          },
          "expiresFrom": {
            "title": "Expires from",
            "type": "string",
            "description": "Start of a custom expiration date range (YYYY-MM-DD or relative like \"-30 days\"). When set (with or without \"Expires to\"), it replaces \"Expiring within (days)\". Use a past date to find domains that already expired."
          },
          "expiresTo": {
            "title": "Expires to",
            "type": "string",
            "description": "End of the custom expiration date range (inclusive). YYYY-MM-DD or relative like \"+90 days\"."
          },
          "registrationStatus": {
            "title": "Registration status",
            "enum": [
              "any",
              "registered",
              "expired"
            ],
            "type": "string",
            "description": "Filter by whether the registration is still active. Expired domains stay in the database only for a short time after they drop.",
            "default": "any"
          },
          "minDomainAgeYears": {
            "title": "Minimum domain age (years)",
            "minimum": 0,
            "maximum": 50,
            "type": "number",
            "description": "Only domains first registered at least this many years ago (by creation date). Leave empty for any age."
          },
          "keywordMatch": {
            "title": "Keyword match",
            "enum": [
              "contains",
              "startsWith",
              "endsWith",
              "exact",
              "regex"
            ],
            "type": "string",
            "description": "How the keywords are matched against the domain name. With \"Regular expression\", each keyword is a pattern and any of them may match.",
            "default": "contains"
          },
          "excludeKeywords": {
            "title": "Exclude domains containing",
            "maxItems": 8,
            "type": "array",
            "description": "Skip domains containing any of these texts. Each entry counts as one filter condition.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 63,
              "pattern": "^[A-Za-z0-9.-]{1,63}$"
            },
            "default": []
          },
          "excludeHyphens": {
            "title": "Exclude domains with hyphens",
            "type": "boolean",
            "description": "Skip domains that contain a hyphen.",
            "default": false
          },
          "maxNameLength": {
            "title": "Maximum name length",
            "minimum": 1,
            "maximum": 63,
            "type": "integer",
            "description": "Only domains whose name (the part before the first dot) has at most this many characters. Leave empty for any length."
          },
          "registrar": {
            "title": "Registrar contains",
            "pattern": "^[^%_]+$",
            "minLength": 2,
            "maxLength": 100,
            "type": "string",
            "description": "Only domains whose registrar name contains this text (2–100 characters, no % or _), e.g. \"GoDaddy\" or \"NameCheap\"."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "referringDomains",
              "domainScore",
              "backlinks",
              "dofollowBacklinks",
              "referringMainDomains",
              "referringPages",
              "organicTraffic",
              "organicKeywords",
              "organicTrafficValue",
              "expiresAt",
              "createdAt",
              "firstSeenAt",
              "lastChangedAt",
              "domain",
              "none"
            ],
            "type": "string",
            "description": "Main sort order of the list. \"Domain score\" is calculated by the Actor: the database picks the domains by referring domains, then the Actor re-orders them by score (the direction below applies), which allows at most 10,000 domains per run.",
            "default": "referringDomains"
          },
          "sortDirection": {
            "title": "Sort direction",
            "enum": [
              "desc",
              "asc"
            ],
            "type": "string",
            "description": "Direction of the main sort.",
            "default": "desc"
          },
          "additionalSortRules": {
            "title": "Additional sort rules",
            "type": "array",
            "description": "Up to 2 tie-breaker rules as \"field,direction\", e.g. \"expiresAt,asc\" or \"organicTraffic,desc\". Any numeric or date output field can be used.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "startOffset": {
            "title": "Start offset",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Skip this many domains of the sorted list first (0–10,000). Use it to continue a previous run with the same filters.",
            "default": 0
          },
          "rawFilters": {
            "title": "Raw filters",
            "type": "array",
            "description": "Extra conditions in the form [\"field\", \"operator\", value], joined with \"and\" / \"or\" and nestable, e.g. [[\"organicTraffic\", \">\", 100], \"or\", [\"referringDomains\", \">=\", 50]]. Fields: any output field (domain, tld, registrar, isRegistered, statusCodes, createdAt, lastChangedAt, expiresAt, whoisUpdatedAt, firstSeenAt, backlinks, dofollowBacklinks, referringDomains, referringMainDomains, referringPages, backlinksUpdatedAt, organicKeywords, organicTraffic, organicTrafficValue, paidKeywords, paidTraffic, paidTrafficValue, organicPos1 … organicPos91to100, paidPos1 … paidPos91to100). Operators: =, <>, <, <=, >, >=, in, not_in, like, not_like (% = any text), regex. Dates accept YYYY-MM-DD. Combined with all other filters using \"and\"; max 8 conditions per run in total."
          },
          "includeRankingDistribution": {
            "title": "Include ranking distribution",
            "type": "boolean",
            "description": "Add 24 columns with the number of keywords ranking in positions 1, 2–3, 4–10 … 91–100 (organic and paid).",
            "default": false
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}