{
  "openapi": "3.0.1",
  "info": {
    "title": "Reverse Email Lookup — Email to Name, LinkedIn & Company",
    "description": "Find the person and company behind any email using free public OSINT sources. Name, LinkedIn URL, job title, company domain, location, confidence score and per-field provenance. BYOK waterfall + MCP. Pay only for matches; misses free.",
    "version": "0.2",
    "x-build-id": "zBLs2fPabneoGMD3p"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/apricot_blackberry~reverse-contact-osint/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-apricot_blackberry-reverse-contact-osint",
        "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/apricot_blackberry~reverse-contact-osint/runs": {
      "post": {
        "operationId": "runs-sync-apricot_blackberry-reverse-contact-osint",
        "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/apricot_blackberry~reverse-contact-osint/run-sync": {
      "post": {
        "operationId": "run-sync-apricot_blackberry-reverse-contact-osint",
        "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": [
          "emails"
        ],
        "properties": {
          "emails": {
            "title": "Emails",
            "type": "array",
            "description": "Email addresses to enrich. One result per email.",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "title": "OSINT sources",
            "type": "array",
            "description": "Which free sources to query. Disable any you don't need to speed up runs.",
            "items": {
              "type": "string",
              "enum": [
                "dns",
                "rdap",
                "gravatar",
                "github",
                "keybase",
                "crtsh",
                "website",
                "search",
                "sitePattern",
                "wayback",
                "hackernews",
                "githubOrg",
                "news",
                "secEdgar",
                "hibp",
                "emailrep"
              ],
              "enumTitles": [
                "DNS (MX / SPF / DMARC / mail provider)",
                "RDAP (domain registration + registrar)",
                "Gravatar (avatar, name, location, linked accounts)",
                "GitHub (public profile by email)",
                "Keybase (verified identities by email)",
                "crt.sh (certificate-transparency subdomain footprint)",
                "Company website scrape (name, description, logo, socials, JSON-LD)",
                "Web search (LinkedIn / public profile discovery)",
                "Company-site email crawl (/team, /contact… — is this exact email listed? what's the email format?)",
                "Wayback Machine (first archived, site activity)",
                "Hacker News (mentions, user profile)",
                "GitHub organisation (repos, languages, stars)",
                "Google News (company mentions last 30d)",
                "SEC EDGAR (public-company filings)",
                "Have I Been Pwned (aggregate breach count — needs API key)",
                "EmailRep.io (reputation — key optional)"
              ]
            },
            "default": [
              "dns",
              "rdap",
              "gravatar",
              "github",
              "keybase",
              "crtsh",
              "website",
              "search",
              "sitePattern",
              "wayback",
              "hackernews",
              "githubOrg",
              "news",
              "secEdgar"
            ]
          },
          "maxEmails": {
            "title": "Max emails (cost cap)",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many emails. Leave empty to process the whole list."
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many emails to enrich in parallel. Keep low (2–4) to avoid rate limits on free endpoints.",
            "default": 3
          },
          "githubToken": {
            "title": "GitHub token (optional)",
            "type": "string",
            "description": "Raises GitHub search rate limit from 10/min to 30/min and enables commit-author search."
          },
          "hibpApiKey": {
            "title": "HIBP API key (optional)",
            "type": "string",
            "description": "Enables the Have I Been Pwned source. Output is aggregate-only (breach count, names, latest date) — never raw records."
          },
          "emailrepApiKey": {
            "title": "EmailRep.io key (optional)",
            "type": "string",
            "description": "Optional; unauthenticated calls work but are heavily rate-limited."
          },
          "byokMode": {
            "title": "Waterfall to my own vendors",
            "enum": [
              "on-miss",
              "always",
              "off"
            ],
            "type": "string",
            "description": "Bring-your-own-key waterfall. \"On miss\" (default) calls your vendor only when the free public sources find nobody — the cheapest way to lift match rate. \"Always\" also calls the vendor on hits to fill gaps. Vendor credits are billed by the vendor to your account; we still charge only our normal per-match event.",
            "default": "on-miss"
          },
          "prospeoApiKey": {
            "title": "Prospeo API key",
            "type": "string",
            "description": "Prospeo Enrich Person — 1 credit per email match, no charge on NO_MATCH, free re-enrich within 90 days. Best price/precision of the three."
          },
          "reverseContactApiKey": {
            "title": "Reverse Contact API key",
            "type": "string",
            "description": "Reverse Contact /v2/enrich/persons — 2 credits on match, 404 free. LinkedIn-derived profile."
          },
          "pdlApiKey": {
            "title": "People Data Labs API key",
            "type": "string",
            "description": "PDL Person Enrichment — 1 credit on match (likelihood ≥ 6), 404 free. Widest coverage, includes phone when present."
          },
          "byokOrder": {
            "title": "Vendor order",
            "type": "array",
            "description": "Order to try vendors (first hit wins). Default: reversecontact → prospeo → pdl, skipping any without a key.",
            "default": [
              "prospeo",
              "reversecontact",
              "pdl"
            ],
            "items": {
              "type": "string"
            }
          },
          "byokMobile": {
            "title": "Ask vendor for mobile number",
            "type": "boolean",
            "description": "Prospeo only: request the mobile (10 credits when found). Off by default because it is expensive.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy is recommended for the website-scrape and web-search sources.",
            "default": {
              "useApifyProxy": true
            }
          },
          "requestTimeoutSecs": {
            "title": "Per-request timeout (s)",
            "minimum": 3,
            "maximum": 60,
            "type": "integer",
            "description": "Seconds to wait for each source before giving up on it. Slow sources (crt.sh) get extra time automatically.",
            "default": 15
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}