{
  "openapi": "3.0.1",
  "info": {
    "title": "Lexonia: Audience Intel — Creator & Influencer Contact Finder",
    "description": "Start from the people you sell to — get the creators they already watch. YouTube, TikTok, Bilibili (B站) & Douyin (抖音) channels whose viewers are your audience, often not channels about your product, ranked and tiered with contacts, one row per person. Free estimate before every run.",
    "version": "0.0",
    "x-build-id": "QLIcbOBvt4TEsG4re"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lexonia~lexonia-video-intel/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lexonia-lexonia-video-intel",
        "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/lexonia~lexonia-video-intel/runs": {
      "post": {
        "operationId": "runs-sync-lexonia-lexonia-video-intel",
        "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/lexonia~lexonia-video-intel/run-sync": {
      "post": {
        "operationId": "run-sync-lexonia-lexonia-video-intel",
        "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": [
          "topic"
        ],
        "properties": {
          "topic": {
            "title": "Whose attention do you want? Describe your audience (plain words)",
            "type": "string",
            "description": "Start from the people you sell to, not from a type of channel — the creators who hold your audience are often not about your product. One sentence, in your words, any language. Say: (1) the country or market, (2) who exactly you want to reach, by what they do, (3) who looks similar but should be left out, (4) that you want the owners' contacts. Good: \"YouTube and TikTok channels whose audience is UK independent pet groomers — salon owners and mobile groomers — not vets, dog trainers or pet shops, with the owners' contacts\". Too wide: \"pet lovers\". Research briefs work too: \"Korean creators who explain humanoid robot design\". This is the only required field: the estimate writes the boundaries, the price and suggestions from it before anything is charged. Add the words your audience uses for itself and its work — 5 to 10, no synonyms (e.g. \"owner operator, load board, dispatch\"); each becomes a search, and more searches cost more."
          },
          "platforms": {
            "title": "Platforms to search",
            "type": "array",
            "description": "Which platforms to search: YouTube and TikTok (Western) and China's Bilibili & Douyin. Default: YouTube. Add TikTok for creator audiences; add Bilibili and Douyin for China.",
            "items": {
              "type": "string",
              "enum": [
                "youtube",
                "tiktok",
                "bilibili",
                "douyin"
              ],
              "enumTitles": [
                "YouTube",
                "TikTok",
                "Bilibili (B站)",
                "Douyin (抖音)"
              ]
            },
            "default": [
              "youtube"
            ]
          },
          "estimateOnly": {
            "title": "Estimate only — preview cost, don't run",
            "type": "boolean",
            "description": "ON (default): nothing is searched or charged. You get one record with the price range, the time range, the search plan and — for an audience — the boundaries. Read it, adjust, then switch OFF to run for real.",
            "default": true
          },
          "minFollowers": {
            "title": "Minimum followers / subscribers",
            "type": "integer",
            "description": "Drop channels below this subscriber count. Channels with unknown counts (e.g. some China creators) are kept.",
            "default": 5000
          },
          "maxFollowers": {
            "title": "Maximum followers / subscribers",
            "minimum": 0,
            "type": "integer",
            "description": "0 (default) = no upper limit. Set one when the biggest creators are not who you want: a mega-creator with millions of followers is usually booked out, priced beyond a mid-size brand, and reaches an audience far wider than yours. Good: 500000 — keeps the mid-tier creators who actually reply and convert. Also good: 200000 if you want people you can realistically build a relationship with. Leave at 0 if reach is what you are buying and budget is not the constraint.",
            "default": 0
          },
          "excludeKeywords": {
            "title": "Also exclude (optional)",
            "type": "array",
            "description": "Words that mark creators you do NOT want, one per entry (e.g. 'box truck', 'hotshot', 'DIY'). Added to the boundaries the estimate wrote.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "requireContact": {
            "title": "Drop creators with no contact",
            "type": "boolean",
            "description": "ON (default): a creator with no way to reach them (no email, website, social link, WeChat/QQ/Weibo) is not a result and is dropped. OFF: keep them and show what was found.",
            "default": true
          },
          "profile": {
            "title": "Boundaries from the estimate (optional, JSON)",
            "type": "object",
            "description": "Paste plan.profile from the estimate here, edited or as is, to run exactly those boundaries. Leave empty and the Actor writes them again from your sentence. Simpler edits: use 'Also exclude' and 'Minimum followers' above."
          },
          "maxChannels": {
            "title": "How many creators to return",
            "type": "integer",
            "description": "0 (default) = the rule: for an audience, the top 10–15% of the creators inside the boundaries who have a contact, up to 100, ranked by score (all of them if fewer qualify); for research, the top 50. Set a number to override. The run always reports the whole population and how it narrowed.",
            "default": 0
          },
          "outputFormats": {
            "title": "Output formats",
            "type": "array",
            "description": "Files saved to the run's key-value store besides the dataset: results.json (full dossier), results.csv, results.md (readable report). Audience runs always add master-database.csv: one row per person with every platform URL, contacts, niche, subject type, country, tier and scores.",
            "items": {
              "type": "string",
              "enum": [
                "json",
                "csv",
                "markdown"
              ],
              "enumTitles": [
                "JSON",
                "CSV (spreadsheet)",
                "Markdown"
              ]
            },
            "default": [
              "json",
              "csv"
            ]
          },
          "topNContentDigest": {
            "title": "Deep read — what your top creators say (Content focus)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "CONTENT FOCUS ONLY (ignored in Audience focus — there you want who they REACH, not what they say). For the top N creators, read their latest video and summarize it in English so you see what they're actually saying. One flat price per creator read, whatever the video length or platform — the estimate shows it. 0 = off.",
            "default": 0
          },
          "digestSummaryLanguages": {
            "title": "Digest summary languages",
            "type": "array",
            "description": "If deep read is on, summarize each creator's videos in these languages.",
            "default": [
              "English"
            ],
            "items": {
              "type": "string"
            }
          },
          "digestTranslateLanguages": {
            "title": "Digest translate languages",
            "type": "array",
            "description": "If deep read is on, also produce a full translation of each creator's recent video in these languages (useful for Bilibili/Douyin creators).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "focus": {
            "title": "Focus — what are you optimizing for?",
            "enum": [
              "auto",
              "content",
              "audience"
            ],
            "type": "string",
            "description": "Rarely needed. Auto (default): the Actor picks from your topic — briefs about reaching, partnering with or contacting creators or their audience get Audience focus; research briefs get Content focus. Or force it: Content ranks by topical relevance (best for 'what are they saying'); Audience ranks creators as partnership targets (reach + engagement lead, contacts prioritized, uncontactable creators dropped).",
            "default": "auto"
          },
          "keywordSetA": {
            "title": "Keyword set A — SUBJECT (optional override)",
            "type": "array",
            "description": "Optional. Leave empty and the Actor plans it from your topic (the plan is shown in the estimate). If you fill it: WHAT the content is about, each phrase its own entry, entries are synonyms (any ONE counts). A result must match Set A AND Set B.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywordSetB": {
            "title": "Keyword set B — ANGLE (optional override)",
            "type": "array",
            "description": "Optional. Leave empty and the Actor plans it from your topic. If you fill it: the ANGLE or kind of content (e.g. dispatch | load board | business), each phrase its own entry, any ONE counts. Fill A and B together.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywordSetC": {
            "title": "Keyword set C — REFINE (optional)",
            "type": "array",
            "description": "Facet 3 of 3 — an OPTIONAL extra requirement. Each phrase its own entry; any ONE counts. If filled, a result must ALSO contain one of these (A AND B AND C). Leave empty for A AND B only. ▶ Example: Set C = beginner | profit → keeps only beginner/profit-focused owner-operator-dispatch videos.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "marketLanguage": {
            "title": "Search language (market)",
            "enum": [
              "auto",
              "en",
              "zh",
              "es",
              "ja",
              "ko",
              "pt",
              "ru",
              "fr",
              "de",
              "ar",
              "hi",
              "id",
              "vi"
            ],
            "type": "string",
            "description": "The language to actually search in. Keywords are rendered into this language so the search hits the target market's local content — e.g. Chinese for Bilibili/Douyin. 'auto' picks the natural language of each selected platform's market.",
            "default": "auto"
          },
          "channelUrls": {
            "title": "Search within specific channels (optional)",
            "type": "array",
            "description": "Optional. Paste channel/creator URLs (YouTube, TikTok @profile, Bilibili space, or Douyin user) to search WITHIN those channels instead of discovering across a platform. Leave empty for normal discovery.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "outputLevel": {
            "title": "Return channels or videos (Content focus)",
            "enum": [
              "channels",
              "videos"
            ],
            "type": "string",
            "description": "CONTENT FOCUS. 'Channels' (default) = a ranked shortlist of CREATORS (ranked on key-phrase match + recency + consistency + reach). 'Videos' = the individual matching CLIPS (ranked on key-phrase match + recency + views — same key phrases, minus the per-creator consistency). In AUDIENCE focus this is ignored — you always get creators.",
            "default": "channels"
          },
          "minViews": {
            "title": "Minimum views (best video)",
            "type": "integer",
            "description": "Drop channels whose best on-topic video has fewer than this many views. Leave 0 for no view filter.",
            "default": 0
          },
          "includePopularityInRanking": {
            "title": "Factor popularity into the ranking (Content focus)",
            "type": "boolean",
            "description": "Content focus only. OFF (default): ranking is purely topical, so a small focused channel can outrank a big generic one. ON: also weight audience size. (In Audience focus, reach is already a lead factor, so this is not needed.)",
            "default": false
          },
          "enrichContacts": {
            "title": "Deep contact enrichment (crawl websites for email/phone)",
            "type": "boolean",
            "description": "Optional. Crawl the discovered websites of top channels for emails/phones. Adds time and can pull sponsor/reference contacts, so it's off by default in Content focus (Audience focus runs it automatically).",
            "default": false
          },
          "enrichGoogleBusiness": {
            "title": "Google Business Profile lookup (local-business owners)",
            "type": "boolean",
            "description": "Optional. For owners that are LOCAL BUSINESSES, look them up on Google Maps to attach phone, address, website, and email. Best for local-business verticals (med spa, salon, dojo…); name→listing matching is fuzzy for pure influencers. No China (Bilibili/Douyin) coverage.",
            "default": false
          },
          "localizeKeywords": {
            "title": "Translate keywords to the market language",
            "type": "boolean",
            "description": "ON (default): your English/source keywords are translated into the search language above, while non-translatable technical and brand terms are kept as-is (Docker, API, LLM, GitHub, DeepSeek…). OFF: keywords are used exactly as typed (use this if you've already entered them in the target language, or they're pure technical terms).",
            "default": true
          },
          "preserveTerms": {
            "title": "Keep these terms untranslated",
            "type": "array",
            "description": "Optional. Technical/brand terms to leave in their original form during keyword translation (common ones like API, LLM, Docker are auto-preserved). Add product names or acronyms specific to your topic.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerKeyword": {
            "title": "Max results per keyword",
            "minimum": 10,
            "maximum": 500,
            "type": "integer",
            "description": "How many raw results to pull per keyword/phrase before filtering. Higher = wider net + more coverage, but more scraping cost. Lower = leaner & cheaper.",
            "default": 50
          },
          "maxSubActorSpendUsd": {
            "title": "Spending cap per run (optional)",
            "type": "number",
            "description": "Optional. A ceiling in USD for this run. If the estimate shows a total above it, narrow the search (fewer platforms, fewer results per term) or raise the cap."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}