{
  "openapi": "3.1.0",
  "info": {
    "title": "Delta Registry — OSM Business Data + DNS Verify - B2B Lead JSON Feed",
    "description": "Discovers B2B leads from your own seed list or OpenStreetMap's Overpass API (Google Maps excluded on ToS grounds), crawls each site for contact emails, verifies plausibility via DNS/MX, supports BYOK Hunter.io/People Data Labs enrichment, and optionally scores buying intent with Claude Haiku 4.5.",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/5QufcYxRkFNHM4h8K/runs": {
      "post": {
        "operationId": "startActor18B2bLeadMagnetRun",
        "summary": "Start an async run of: Discovers B2B leads from your own seed list or OpenStreetMap's Overpass API (Google Maps excluded on ToS grounds), crawls each site for contact emails, verifies plausibility via DNS/MX, supports BYOK Hunter.io/People Data Labs enrichment, and optionally scores buying intent with Claude Haiku 4.5.",
        "x-async-pattern-reason": "No production run history exists for this actor — defaulting to the async run+poll pattern as a precaution, not a measurement. Re-run this generator once real telemetry exists to potentially switch it to sync.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "discoveryMode": {
                    "type": "string",
                    "description": "seedList (Mode A): enrich the company names/domains you supply directly - zero discovery-layer risk. osmOverpass (Mode B): discover candidate businesses from OpenStreetMap's Overpass API within a bounding box (ODbL-licensed - Google Maps is intentionally excluded from discovery because its Maps/Earth Additional ToS and Maps Platform ToS both prohibit building a business-listings/mailing-list database from Maps content).",
                    "default": "seedList",
                    "enum": [
                      "seedList",
                      "osmOverpass"
                    ]
                  },
                  "seedList": {
                    "type": "array",
                    "description": "Company names or website domains/URLs to enrich directly. Required (non-empty) when discoveryMode is \"seedList\". Mixed entries are fine - each is heuristically read as either a bare name (\"Acme Corp\") or a domain/URL (\"acme.com\", \"https://acme.com\").",
                    "default": []
                  },
                  "overpassBbox": {
                    "type": "string",
                    "description": "\"south,west,north,east\" in decimal degrees, e.g. \"50.70,-1.90,50.90,-1.30\". Required when discoveryMode is \"osmOverpass\". Queries the public overpass-api.de mirror, which is fair-use only - budget a self-hosted Overpass instance for production volume."
                  },
                  "maxLeads": {
                    "type": "integer",
                    "description": "Hard cap on how many candidates are enriched and charged this run.",
                    "default": 50,
                    "minimum": 1
                  },
                  "includeIntentScore": {
                    "type": "boolean",
                    "description": "When enabled, each lead gets one Claude Haiku 4.5 call scoring hiring-page, funding-news, and tech-stack signals read only from the business's own crawled site text (always paired with a mandatory disclaimer field - a heuristic read of public text, never a verified fact). Bills the enriched_lead PPE event ($0.015/record) instead of basic_lead ($0.002/record). Requires this Actor's own ANTHROPIC_API_KEY environment variable to be configured on the Actor - this is the operator's own compute cost (priced into the Enriched Lead rate), not a customer BYOK field.",
                    "default": false
                  },
                  "hunterApiKey": {
                    "type": "string",
                    "description": "Your own Hunter.io API key. When supplied, this actor calls Hunter.io's domain-search endpoint using YOUR key - Hunter.io bills your own account directly, never this actor's own PPE price."
                  },
                  "peopleDataLabsApiKey": {
                    "type": "string",
                    "description": "Your own People Data Labs API key, used and billed the same way as hunterApiKey - your own account is charged by People Data Labs directly."
                  },
                  "skipKnownLeads": {
                    "type": "boolean",
                    "description": "When enabled, a lead already discovered (and charged for) in a prior run of this Actor is skipped before the enrichment waterfall runs - no repeat website crawl, no repeat BYOK/intent-score calls, and no repeat basic_lead/enriched_lead charge for the same business. Identity is a stable id derived from the OSM id (Mode B) or normalized name+domain (Mode A), persisted in this Actor's own key-value store across runs. Leave off (default) for a full re-enrichment on every run, e.g. if a business's own site content may have changed since last time.",
                    "default": false
                  }
                },
                "required": []
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Run started. Poll GET /actor-runs/{runId} with the returned run id until status is SUCCEEDED, then fetch its dataset items.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-openai-isConsequential": false
      }
    },
    "/actor-runs/{runId}": {
      "get": {
        "operationId": "getActor18B2bLeadMagnetRunStatus",
        "summary": "Poll the status of a previously started run.",
        "parameters": [
          {
            "name": "runId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Current run status. When status is SUCCEEDED, fetch the dataset via GET /datasets/{datasetId}/items, passing this response's defaultDatasetId field as {datasetId}.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string"
                        },
                        "defaultDatasetId": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-openai-isConsequential": false
      }
    },
    "/datasets/{datasetId}/items": {
      "get": {
        "operationId": "getActor18B2bLeadMagnetDatasetItems",
        "summary": "Fetch the dataset items produced by a completed run.",
        "parameters": [
          {
            "name": "datasetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Array of normalized records from the actor run.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$schema": "https://json-schema.org/draft/2020-12/schema",
                    "actorSpecification": 1,
                    "title": "Dataset Schema",
                    "fields": {
                      "type": "object",
                      "properties": {
                        "record_id": {
                          "title": "Record ID",
                          "type": "string",
                          "description": "osm:<type>/<id> for OSM-discovered leads; a deterministic seed:<hash> for seed-list leads - stable across runs for the same input."
                        },
                        "event_type": {
                          "title": "Event Type",
                          "type": "string",
                          "description": "Always NEW_LISTING - this actor has no cross-run delta-tracking concept."
                        },
                        "scraped_at": {
                          "title": "Scraped At",
                          "type": "string",
                          "description": "ISO-8601 timestamp of this enrichment."
                        },
                        "is_new": {
                          "title": "Is New",
                          "type": [
                            "boolean",
                            "null"
                          ],
                          "description": "true if this exact business (identified by OSM id, or normalized name+domain for seed-list leads) was never seen in a prior run of this Actor; false if it was. Tracked in this Actor's own key-value store regardless of the skipKnownLeads input - that flag only controls whether an already-known lead is skipped, not whether it's tracked. Unlike a registry-monitoring actor, this is a simple seen/not-seen signal, not a richer NEW_LISTING/STATUS_CHANGE/UPDATED/CLOSED classification - a business's own listing has no observable status this actor tracks."
                        },
                        "source_url": {
                          "title": "Source URL",
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "The business's own website, when known."
                        },
                        "recipient_or_defendant_name": {
                          "title": "Business Name",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "entity_identifier_native": {
                          "title": "Native Entity Identifier",
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Raw OSM type/id (e.g. node/48213456) for OSM discovery; null for seed-list leads (no native source id exists for a customer-typed name)."
                        },
                        "value_native": {
                          "title": "Value (native)",
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Not applicable to this actor - always null."
                        },
                        "value_currency": {
                          "title": "Value Currency",
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Not applicable to this actor - always null."
                        },
                        "value_usd_normalized": {
                          "title": "Value (USD)",
                          "type": [
                            "number",
                            "null"
                          ],
                          "description": "Not applicable to this actor - always null."
                        },
                        "effective_date_iso": {
                          "title": "Effective Date",
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Not applicable to this actor - always null."
                        },
                        "publish_date_iso": {
                          "title": "Publish Date",
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Not applicable to this actor - always null."
                        },
                        "category_or_type": {
                          "title": "Category",
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "business_listing_osm or business_listing_seed."
                        },
                        "status_or_estado": {
                          "title": "Status",
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Not applicable to this actor - always null."
                        },
                        "awarding_or_regulating_agency": {
                          "title": "Agency",
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Not applicable to this actor - always null."
                        },
                        "jurisdiction": {
                          "title": "Jurisdiction",
                          "type": "string",
                          "description": "OSM for Overpass discovery; GLOBAL for seed-list leads (no single jurisdiction applies)."
                        },
                        "source_document_url": {
                          "title": "Source Document URL",
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Not applicable to this actor - always null."
                        },
                        "reference_number": {
                          "title": "Reference Number",
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Not applicable to this actor - always null."
                        },
                        "discoverySource": {
                          "title": "Discovery Source",
                          "type": "string",
                          "enum": [
                            "seedList",
                            "osm"
                          ]
                        },
                        "website": {
                          "title": "Website",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "emailsFound": {
                          "title": "Emails Found",
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "mailto: links and regex-matched addresses found on the crawled page(s)."
                        },
                        "emailPlausible": {
                          "title": "Email Plausible",
                          "type": [
                            "boolean",
                            "null"
                          ],
                          "description": "true when the domain has a non-null MX record set (dns.promises.resolveMx). null when no domain was available to check."
                        },
                        "emailPlausibilityMethod": {
                          "title": "Email Plausibility Method",
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "mx_record_present",
                            "null_mx",
                            "mx_lookup_failed",
                            "no_domain",
                            null
                          ]
                        },
                        "websiteContentUnavailable": {
                          "title": "Website Content Unavailable",
                          "type": "boolean",
                          "description": "true when the site could not be fetched, is disallowed by robots.txt, or looks like a client-side-rendered SPA with no server-delivered content - this actor never escalates to a headless browser."
                        },
                        "byokEnrichment": {
                          "title": "BYOK Enrichment",
                          "type": [
                            "object",
                            "null"
                          ],
                          "description": "null when neither hunterApiKey nor peopleDataLabsApiKey was supplied. Otherwise per-provider used/data/error using the CUSTOMER's own key - billed by that vendor to the customer directly, never to this actor's own PPE price.",
                          "properties": {
                            "hunterIo": {
                              "type": [
                                "object",
                                "null"
                              ]
                            },
                            "peopleDataLabs": {
                              "type": [
                                "object",
                                "null"
                              ]
                            }
                          }
                        },
                        "intentScore": {
                          "title": "Intent Score",
                          "type": [
                            "number",
                            "null"
                          ],
                          "description": "0-100 heuristic buying-intent score from Claude Haiku 4.5, only when includeIntentScore was enabled and the model call succeeded."
                        },
                        "intentScoreRationale": {
                          "title": "Intent Score Rationale",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "intentScoreDisclaimer": {
                          "title": "Intent Score Disclaimer",
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Mandatory whenever intent scoring was attempted - never omitted. States this is a heuristic LLM read of public text, not a verified fact."
                        }
                      }
                    },
                    "views": {
                      "overview": {
                        "title": "Overview",
                        "transformation": {
                          "fields": [
                            "recipient_or_defendant_name",
                            "website",
                            "discoverySource",
                            "emailsFound",
                            "emailPlausible",
                            "intentScore",
                            "jurisdiction"
                          ]
                        },
                        "display": {
                          "component": "table",
                          "columns": [
                            {
                              "label": "Business",
                              "format": "text",
                              "field": "recipient_or_defendant_name"
                            },
                            {
                              "label": "Website",
                              "format": "text",
                              "field": "website"
                            },
                            {
                              "label": "Source",
                              "format": "text",
                              "field": "discoverySource"
                            },
                            {
                              "label": "Emails Found",
                              "format": "text",
                              "field": "emailsFound"
                            },
                            {
                              "label": "Email Plausible",
                              "format": "text",
                              "field": "emailPlausible"
                            },
                            {
                              "label": "Intent Score",
                              "format": "text",
                              "field": "intentScore"
                            },
                            {
                              "label": "Jurisdiction",
                              "format": "text",
                              "field": "jurisdiction"
                            }
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-openai-isConsequential": false
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApifyBearerAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    }
  },
  "security": [
    {
      "ApifyBearerAuth": []
    }
  ]
}