{
  "openapi": "3.0.1",
  "info": {
    "title": "Lead Cleaner — Fuzzy Deduplication & Normalization",
    "description": "Deduplicate and normalize scraped lead lists. Matches records that exact deduplicators miss: legal-form variants, phone formats, email aliases and phonetic name spellings. Publishes a reproducible quality benchmark.",
    "version": "0.1",
    "x-build-id": "zOcxZh3YX4zwqzbzB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/javitax47~lead-cleaner/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-javitax47-lead-cleaner",
        "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/javitax47~lead-cleaner/runs": {
      "post": {
        "operationId": "runs-sync-javitax47-lead-cleaner",
        "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/javitax47~lead-cleaner/run-sync": {
      "post": {
        "operationId": "run-sync-javitax47-lead-cleaner",
        "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": {
          "datasetId": {
            "title": "Source dataset ID",
            "type": "string",
            "description": "Dataset to clean — usually the output of the scraper you just ran. Copy the ID from that run's Storage tab."
          },
          "datasetIds": {
            "title": "Additional dataset IDs",
            "type": "array",
            "description": "Merge several datasets and deduplicate across all of them at once. Use this to fold a new scrape into last month's list.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "items": {
            "title": "Inline records",
            "type": "array",
            "description": "Rows to clean, passed directly instead of from a dataset. Useful for testing and for API callers.",
            "default": []
          },
          "entityLevel": {
            "title": "What counts as one duplicate",
            "enum": [
              "contact",
              "company"
            ],
            "type": "string",
            "description": "contact — two people at the same company stay as two rows (default; this is what a sales list means by a duplicate). company — one row per organisation, contacts collapsed.",
            "default": "contact"
          },
          "reportOnly": {
            "title": "Report only, do not merge",
            "type": "boolean",
            "description": "Keep every input row and annotate it with its cluster, match score and reasons. Run this first: it shows exactly what would be merged before anything is removed.",
            "default": false
          },
          "threshold": {
            "title": "Match threshold",
            "minimum": 50,
            "maximum": 95,
            "type": "integer",
            "description": "How much evidence is required to merge, from 50 (aggressive) to 95 (conservative). 75 is the default: the labelled benchmark scores a perfect F1 anywhere from 60 to 75 and starts missing duplicates at 80. Pairs within 10 points below the threshold are written to the review-pairs dataset instead of being merged.",
            "default": 75
          },
          "defaultCountry": {
            "title": "Default country",
            "type": "string",
            "description": "ISO two-letter code used to interpret phone numbers and tax IDs that have no country prefix. Set it when your list is single-country — it substantially improves phone matching."
          },
          "checkMx": {
            "title": "Check email domains have MX records",
            "type": "boolean",
            "description": "Adds a DNS lookup per distinct domain (cached). Flags addresses whose domain cannot receive mail. No SMTP probing is performed and no message is ever sent.",
            "default": false
          },
          "fieldMap": {
            "title": "Field mapping override",
            "type": "object",
            "description": "Only needed when auto-detection picks the wrong column. Keys: email, phone, company, person, domain, tax_id, address, city, postal_code, country. Values are the source column names.",
            "default": {}
          },
          "lshThreshold": {
            "title": "Candidate generation sensitivity",
            "minimum": 30,
            "maximum": 80,
            "type": "integer",
            "description": "Advanced. How similar two company names must look before the records are compared in detail, from 30 (compare more pairs, much slower) to 80 (faster, may miss heavily mangled duplicates). Lowering it from the default 65 to 50 multiplies candidate pairs by about nine and finds roughly 0.7% more duplicates.",
            "default": 65
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}