{
  "openapi": "3.0.1",
  "info": {
    "title": "Tiktok Contact Extractor",
    "description": "TikTok Contact Extractor finds public contact details from TikTok creators, including emails, phones, websites, Instagram, YouTube, and profile data. Use it for influencer outreach, lead generation, creator partnerships, and contact-ready CRM exports.",
    "version": "0.2",
    "x-build-id": "9Z5NjdMXmlG5xqgbY"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/coregent~tiktok-contact-extractor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-coregent-tiktok-contact-extractor",
        "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/coregent~tiktok-contact-extractor/runs": {
      "post": {
        "operationId": "runs-sync-coregent-tiktok-contact-extractor",
        "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/coregent~tiktok-contact-extractor/run-sync": {
      "post": {
        "operationId": "run-sync-coregent-tiktok-contact-extractor",
        "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": {
          "profiles": {
            "title": "Profiles",
            "type": "array",
            "description": "TikTok profile URLs or usernames to extract contacts from. Accepts @username or full profile URLs. FREE PLAN NOTE: on the Apify Free plan a run stops after 100 lookups that return no creator (deleted or misspelled usernames). Everything found before that is kept and you are never charged for a lookup that found nothing. Any paid plan removes the limit.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "profileRecords": {
            "title": "Profiles With Your Own IDs",
            "type": "array",
            "description": "Enrich a CRM list and get your own row IDs back. Each entry is {\"profile\": \"@creator\", \"externalId\": \"your-row-id\"}, and every result carries that externalId so you can join the output to your source list without matching on username. Use this OR the plain Profiles field — both work, and both can be used together.",
            "items": {
              "type": "object"
            },
            "default": []
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Keywords or niche terms to discover creators (e.g. 'ugc creator skincare', 'fitness coach').",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "hashtags": {
            "title": "Hashtags",
            "type": "array",
            "description": "Hashtags to discover creators from. Accepts plain text, #tag, or full TikTok tag URLs.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "maxCreatorsPerSource": {
            "title": "Max Creators Per Source",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum creators LOOKED UP from each keyword and each hashtag. Applies per source, not in total — five hashtags at 50 means up to 250 lookups. With Only Creators With An Email on, the number you receive is lower than this, because creators without an email are filtered out; on hashtags most are skipped for free before the lookup, on keywords they are not. Raise it to receive more. Profiles you supply directly are not capped. There is no unlimited setting.",
            "default": 50
          },
          "searchRegion": {
            "title": "Search Region (where Google searches from)",
            "enum": [
              "",
              "US",
              "GB",
              "CA",
              "AU",
              "IE",
              "NZ",
              "DE",
              "FR",
              "ES",
              "IT",
              "NL",
              "SE",
              "NO",
              "DK",
              "PL",
              "PT",
              "BR",
              "MX",
              "AR",
              "IN",
              "SG",
              "PH",
              "ID",
              "MY",
              "JP",
              "KR",
              "AE",
              "ZA"
            ],
            "type": "string",
            "description": "Biases keyword discovery towards creators who rank in a particular country's Google results — useful when you want UK or German creators rather than whoever ranks globally. IMPORTANT: this is the region Google searches FROM, NOT a verified creator location. TikTok does not publish creator location and we do not guess at it, so a creator here may live anywhere; this only changes which results rank highest. Affects KEYWORDS only — hashtags and direct profiles ignore it. Leave on Default unless you specifically want regional bias.",
            "default": ""
          },
          "maxCreators": {
            "title": "Max Creators",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of creator contact records RETURNED across all inputs. Note: creators removed by the filters below were still scanned, so filters reduce output, not scan cost.",
            "default": 500
          },
          "minFollowers": {
            "title": "Minimum Followers",
            "minimum": 0,
            "type": "integer",
            "description": "Only include creators with at least this many followers.",
            "default": 0
          },
          "maxFollowers": {
            "title": "Maximum Followers",
            "minimum": 0,
            "type": "integer",
            "description": "Only include creators with at most this many followers. Set 0 for no limit.",
            "default": 0
          },
          "skipUsernames": {
            "title": "Skip Usernames (already have)",
            "type": "array",
            "description": "Usernames you already hold. They are skipped BEFORE any lookup happens, so they cost nothing and are never charged. Paste the usernames from a previous run to enrich only what is new. Accepts creator, @creator or a full TikTok profile URL.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "emailDomainAllowlist": {
            "title": "Email Domain Allowlist",
            "type": "array",
            "description": "Only keep emails on these domains (e.g. gmail.com, brand.com). Subdomains match too. Leave empty to accept any domain. This is filtering, not verification — no mailbox is contacted.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "emailDomainBlocklist": {
            "title": "Email Domain Blocklist",
            "type": "array",
            "description": "Drop emails on these domains. Ignored when an allowlist is set. Useful for stripping noreply/no-reply and theme or CDN addresses.",
            "items": {
              "type": "string"
            },
            "default": []
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}