{
  "openapi": "3.0.1",
  "info": {
    "title": "Subdomain Finder: Certificate Transparency Scan",
    "description": "Find subdomains of any domain from Certificate Transparency (crt.sh) logs: hostnames, first and last seen, wildcard and valid-cert flags, issuer summary per domain. Export CSV, Excel, JSON. No login or API key. Example: mercadolibre.com returned 129 subdomains from 624 certificates.",
    "version": "0.1",
    "x-build-id": "SKdMNTpSnHbpOgysa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/recordsdata~subdomain-finder-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-recordsdata-subdomain-finder-scraper",
        "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/recordsdata~subdomain-finder-scraper/runs": {
      "post": {
        "operationId": "runs-sync-recordsdata-subdomain-finder-scraper",
        "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/recordsdata~subdomain-finder-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-recordsdata-subdomain-finder-scraper",
        "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",
        "required": [
          "domains"
        ],
        "properties": {
          "domains": {
            "title": "Domains",
            "maxItems": 2000,
            "type": "array",
            "description": "Root domains to find subdomains for, for example apify.com or example.com (up to 2,000 per run). The actor scans each domain with the sources you pick below: Certificate Transparency logs (crt.sh, with automatic Cert Spotter fallback) by default.",
            "default": [
              "apify.com"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of result rows to return (subdomains, summaries and certificate rows together). Free users: limited to 10 rows (preview). Paid users: up to 1,000,000. Also caps your spend.",
            "default": 10
          },
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "Where host names come from. ct = Certificate Transparency logs (crt.sh, Cert Spotter fallback): the only source with certificate history, so it is the default. The others are free public lists that add hosts without certificates: hackertarget (free tier of about 50 searches per day per IP, skipped for the rest of the run once used up), rapiddns (its free page shows the first 100 hosts) and subdomaincenter. Hosts found by several sources are merged into one row and the sources column lists them all. If both Certificate Transparency services are down, subdomain.center and RapidDNS are used instead so the run still returns hosts (certificate columns stay empty and the source column says so); not with 'Only currently valid certificates'.",
            "items": {
              "type": "string",
              "enum": [
                "ct",
                "hackertarget",
                "rapiddns",
                "subdomaincenter"
              ],
              "enumTitles": [
                "Certificate Transparency (crt.sh, Cert Spotter)",
                "HackerTarget",
                "RapidDNS",
                "subdomain.center"
              ]
            },
            "default": [
              "ct"
            ]
          },
          "bruteForce": {
            "title": "Wordlist guessing",
            "enum": [
              "none",
              "small",
              "medium"
            ],
            "type": "string",
            "description": "Also try common host names (www, mail, api, dev, staging...) with a DNS lookup each and add the ones that exist. small = 59 names, medium = 311 names, a few seconds per domain. Names that only resolve because the domain has a wildcard DNS record are dropped. Skipped while 'Only currently valid certificates' is on.",
            "default": "none"
          },
          "onlyValidCerts": {
            "title": "Only currently valid certificates",
            "type": "boolean",
            "description": "Keep only subdomains that appear on at least one non-expired certificate.",
            "default": false
          },
          "includeWildcards": {
            "title": "Include wildcard entries",
            "type": "boolean",
            "description": "Keep *.domain.com style entries as their own rows. With DNS checks on, wildcard rows are listed after the real hosts (they have nothing to resolve).",
            "default": true
          },
          "onlyResolving": {
            "title": "Only hosts that resolve in DNS",
            "type": "boolean",
            "description": "Drop hosts without an A, AAAA or CNAME record that resolves, so expired and internal names disappear. Turns the DNS lookup on.",
            "default": false
          },
          "skipWildcardDnsMatches": {
            "title": "Drop wildcard-DNS lookalikes",
            "type": "boolean",
            "description": "Many domains answer every name (random-label.example.com) with the same address. Hosts whose DNS answer is identical to that catch-all answer are dropped as likely noise. Turns the DNS lookup on. Without this filter such rows are kept and flagged in wildcardDnsMatch.",
            "default": false
          },
          "onlyAlive": {
            "title": "Only hosts that answer over HTTP",
            "type": "boolean",
            "description": "Keep only hosts that return an HTTP response on port 443 or 80. Turns the HTTP probe on.",
            "default": false
          },
          "resolveIps": {
            "title": "Resolve IP addresses",
            "type": "boolean",
            "description": "Look up A, AAAA and CNAME records for every host and add dnsResolves, ipAddresses, cname, behindCloudflare (address inside Cloudflare's published ranges) and wildcardDnsMatch. Included in the normal subdomain price.",
            "default": false
          },
          "httpProbe": {
            "title": "Check HTTP status and page title",
            "type": "boolean",
            "description": "Send one GET request to every host that resolves (https first, then http; up to 3 same-host redirects) and add isAlive, httpStatus, httpTitle, httpServer, httpFinalUrl and httpResponseMs. Only public addresses are contacted. Turns the DNS lookup on. Included in the normal subdomain price.",
            "default": false
          },
          "probeTimeoutSecs": {
            "title": "HTTP timeout (seconds)",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How long to wait for each HTTP attempt before the host counts as not answering. 1 to 10 seconds.",
            "default": 5
          },
          "includeDomainSummary": {
            "title": "Domain summary row",
            "type": "boolean",
            "description": "One row per domain scanned: total certificates, unique subdomains, top issuers. Billed as its own event.",
            "default": true
          },
          "includeCertificates": {
            "title": "Certificate rows",
            "type": "boolean",
            "description": "One row per certificate (up to 200 newest per domain): issuer, common name, validity window and crt.sh id. Needs the ct source. Billed as its own event.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}