{
  "openapi": "3.0.1",
  "info": {
    "title": "Alibaba RFQ Leads AI: Buying Requests Matched to Your Products",
    "description": "First 25 buying leads free. Alibaba RFQ export buying leads that fit your products, pay per qualified buying lead: find buyers on Alibaba, ranked, translated, with a quote reply drafted. Replaces reading the RFQ board by hand. Free demo on any plan.",
    "version": "0.1",
    "x-build-id": "VX1MRgmcQfg17fv8z"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rich_minds~alibaba-rfq-leads-ai/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rich_minds-alibaba-rfq-leads-ai",
        "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/rich_minds~alibaba-rfq-leads-ai/runs": {
      "post": {
        "operationId": "runs-sync-rich_minds-alibaba-rfq-leads-ai",
        "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/rich_minds~alibaba-rfq-leads-ai/run-sync": {
      "post": {
        "operationId": "run-sync-rich_minds-alibaba-rfq-leads-ai",
        "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": {
          "preset": {
            "title": "Start from a ready niche search (one click)",
            "enum": [
              "custom",
              "garments-exporter",
              "led-lighting-exporter",
              "spices-food-exporter",
              "export-agency"
            ],
            "type": "string",
            "description": "Pick a ready niche search and press Start: it replaces the sample with that niche's products, profile and markets (a value you typed yourself always wins) and runs the live RFQ search, first run capped at 75 requests / $0.15 of source spend. <b>Custom</b> = fill the fields yourself.",
            "default": "custom"
          },
          "products": {
            "title": "Your product lines (what buyers should be asking for)",
            "type": "array",
            "description": "One product line per row (<code>cotton t-shirt</code>), searched on Alibaba's RFQ board. Lines typed next to the sample start the live search on your Apify plan, ≈ $0.002 per request read, capped by <b>Max source spend</b>. On a plan that cannot run Store Actors you get the free sample scored on your lines.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Extra Alibaba search keywords (optional)",
            "type": "array",
            "description": "Search terms other than your product lines, e.g. <code>crew neck tee</code>; empty = your product lines. Affects what you pay: each is one more search on your Apify plan, ≈ $0.002 per request read. The free demo does not search them; on a plan that cannot run Store Actors you get the free sample scored on your terms.",
            "items": {
              "type": "string"
            }
          },
          "sellerProfile": {
            "title": "About your company (grounds the fit score and the quote reply)",
            "type": "string",
            "description": "A few sentences: what you make, materials, certificates, MOQ, lead time, port / price term and export markets. The AI scores every request against it and the quote reply uses ONLY these facts — never a price, certificate or lead time you did not write. The rules read your MOQ (\"MOQ 500 pieces\") and markets from it too."
          },
          "notifyEmail": {
            "title": "E-mail me the new buying leads (optional)",
            "type": "string",
            "description": "After every run with at least one new buying lead, the digest (how many are new, the top 10 with country, quantity and the Quote-now link) is e-mailed here through Apify's send-mail Actor. Schedule the run daily (Actions → Schedule) and only the new requests that fit come to your inbox. Never sent for the free demo."
          },
          "minScore": {
            "title": "Minimum score (0–100)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "The field that decides what you pay: buying leads with a fit score below this are discarded and <b>not charged</b>. Raise it to pay only for the strongest matches, lower it to see more.",
            "default": 50
          },
          "maxQualified": {
            "title": "Max qualified buying leads to output",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Hard cap on results and on what <b>this Actor</b> charges — affects what you pay: at most this many × $0.01 with AI on (× $0.004 off), e.g. 100 × $0.01 = $1.00, plus one $0.03 digest per run that billed a new lead (first 3 free). The source's spend has its own cap below. Best-fitting leads first.",
            "default": 100
          },
          "maxDiscoveryChargeUsd": {
            "title": "Max source spend (USD)",
            "minimum": 0.01,
            "maximum": 1000,
            "type": "number",
            "description": "Affects what you pay: hard cap on what the Alibaba RFQ scraper may charge your account in a live search — $0.50 (≈ 250 requests at $0.002). A scheduled run reads twice the requests, so a cap left at $0.50 doubles to $1.00 with it; a cap you set stays, and the status says when it stopped the read.",
            "default": 0.5
          },
          "enableAi": {
            "title": "AI assessment",
            "type": "boolean",
            "description": "AI fit with a quoted reason, English translation, specs, price terms, HS heading and quote reply. <b>On = $0.01 per qualified buying lead + AI tokens (≈ $0.0004); off = $0.004</b>. Non-English requests: leave the AI on — the rules read English only. Runs on Apify's model access or your own key (a free key: 1–3 AI verdicts per run).",
            "default": true
          },
          "buyerCountries": {
            "title": "Only buyers from these countries",
            "type": "array",
            "description": "Keep only requests from buyers in these countries (the live search asks Alibaba for them directly). Empty = every country. Also counts as your export markets in the fit score.",
            "items": {
              "type": "string",
              "enum": [
                "US",
                "CA",
                "MX",
                "BR",
                "AR",
                "CL",
                "CO",
                "PE",
                "GB",
                "DE",
                "FR",
                "ES",
                "IT",
                "NL",
                "BE",
                "PL",
                "SE",
                "PT",
                "IE",
                "CH",
                "TR",
                "RU",
                "UA",
                "AE",
                "SA",
                "QA",
                "KW",
                "OM",
                "IL",
                "EG",
                "MA",
                "DZ",
                "NG",
                "KE",
                "GH",
                "ZA",
                "IN",
                "PK",
                "BD",
                "LK",
                "CN",
                "HK",
                "TW",
                "JP",
                "KR",
                "VN",
                "TH",
                "MY",
                "SG",
                "ID",
                "PH",
                "AU",
                "NZ"
              ],
              "enumTitles": [
                "United States (US)",
                "Canada (CA)",
                "Mexico (MX)",
                "Brazil (BR)",
                "Argentina (AR)",
                "Chile (CL)",
                "Colombia (CO)",
                "Peru (PE)",
                "United Kingdom (GB)",
                "Germany (DE)",
                "France (FR)",
                "Spain (ES)",
                "Italy (IT)",
                "Netherlands (NL)",
                "Belgium (BE)",
                "Poland (PL)",
                "Sweden (SE)",
                "Portugal (PT)",
                "Ireland (IE)",
                "Switzerland (CH)",
                "Turkey (TR)",
                "Russia (RU)",
                "Ukraine (UA)",
                "United Arab Emirates (AE)",
                "Saudi Arabia (SA)",
                "Qatar (QA)",
                "Kuwait (KW)",
                "Oman (OM)",
                "Israel (IL)",
                "Egypt (EG)",
                "Morocco (MA)",
                "Algeria (DZ)",
                "Nigeria (NG)",
                "Kenya (KE)",
                "Ghana (GH)",
                "South Africa (ZA)",
                "India (IN)",
                "Pakistan (PK)",
                "Bangladesh (BD)",
                "Sri Lanka (LK)",
                "China (CN)",
                "Hong Kong (HK)",
                "Taiwan (TW)",
                "Japan (JP)",
                "South Korea (KR)",
                "Vietnam (VN)",
                "Thailand (TH)",
                "Malaysia (MY)",
                "Singapore (SG)",
                "Indonesia (ID)",
                "Philippines (PH)",
                "Australia (AU)",
                "New Zealand (NZ)"
              ]
            }
          },
          "excludeCountries": {
            "title": "Never buyers from these countries",
            "type": "array",
            "description": "Drop requests from these countries before scoring — never charged.",
            "items": {
              "type": "string",
              "enum": [
                "US",
                "CA",
                "MX",
                "BR",
                "AR",
                "CL",
                "CO",
                "PE",
                "GB",
                "DE",
                "FR",
                "ES",
                "IT",
                "NL",
                "BE",
                "PL",
                "SE",
                "PT",
                "IE",
                "CH",
                "TR",
                "RU",
                "UA",
                "AE",
                "SA",
                "QA",
                "KW",
                "OM",
                "IL",
                "EG",
                "MA",
                "DZ",
                "NG",
                "KE",
                "GH",
                "ZA",
                "IN",
                "PK",
                "BD",
                "LK",
                "CN",
                "HK",
                "TW",
                "JP",
                "KR",
                "VN",
                "TH",
                "MY",
                "SG",
                "ID",
                "PH",
                "AU",
                "NZ"
              ],
              "enumTitles": [
                "United States (US)",
                "Canada (CA)",
                "Mexico (MX)",
                "Brazil (BR)",
                "Argentina (AR)",
                "Chile (CL)",
                "Colombia (CO)",
                "Peru (PE)",
                "United Kingdom (GB)",
                "Germany (DE)",
                "France (FR)",
                "Spain (ES)",
                "Italy (IT)",
                "Netherlands (NL)",
                "Belgium (BE)",
                "Poland (PL)",
                "Sweden (SE)",
                "Portugal (PT)",
                "Ireland (IE)",
                "Switzerland (CH)",
                "Turkey (TR)",
                "Russia (RU)",
                "Ukraine (UA)",
                "United Arab Emirates (AE)",
                "Saudi Arabia (SA)",
                "Qatar (QA)",
                "Kuwait (KW)",
                "Oman (OM)",
                "Israel (IL)",
                "Egypt (EG)",
                "Morocco (MA)",
                "Algeria (DZ)",
                "Nigeria (NG)",
                "Kenya (KE)",
                "Ghana (GH)",
                "South Africa (ZA)",
                "India (IN)",
                "Pakistan (PK)",
                "Bangladesh (BD)",
                "Sri Lanka (LK)",
                "China (CN)",
                "Hong Kong (HK)",
                "Taiwan (TW)",
                "Japan (JP)",
                "South Korea (KR)",
                "Vietnam (VN)",
                "Thailand (TH)",
                "Malaysia (MY)",
                "Singapore (SG)",
                "Indonesia (ID)",
                "Philippines (PH)",
                "Australia (AU)",
                "New Zealand (NZ)"
              ]
            }
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Only requests posted in the last N days; 0 = any age. A scheduled run looks back to its last run instead, and the first live run of a search looks back 30 days.",
            "default": 7
          },
          "onlyOpenRequests": {
            "title": "Only requests still taking quotes",
            "type": "boolean",
            "description": "Drop requests where the buyer accepts no more quotes (no quote seats left) — you could not answer them anyway.",
            "default": true
          },
          "minBuyerStars": {
            "title": "Minimum buyer stars (0–3)",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "Alibaba rates each request 0–3 stars for quality. 2 or 3 keeps the serious buyers; 0 = keep all.",
            "default": 0
          },
          "minQuantity": {
            "title": "Minimum quantity",
            "minimum": 0,
            "type": "number",
            "description": "Drop requests below this quantity, compared in the unit below (1 ton = 1,000 kg; a dozen = 12 pieces). A request in a unit that cannot be compared (meters, bags) is kept. 0 = off.",
            "default": 0
          },
          "minQuantityUnit": {
            "title": "Unit of the minimum quantity",
            "enum": [
              "pieces",
              "sets",
              "kg",
              "tons",
              "containers"
            ],
            "type": "string",
            "description": "The unit <b>Minimum quantity</b> is counted in.",
            "default": "pieces"
          },
          "excludeTerms": {
            "title": "Exclude requests mentioning",
            "type": "array",
            "description": "Words that rule a request out (e.g. <code>sample only</code>, <code>second hand</code>). Matched in the subject and text, any case — never charged.",
            "items": {
              "type": "string"
            }
          },
          "targetFlags": {
            "title": "Target flags (any of)",
            "type": "array",
            "description": "Only deliver buying leads that have at least one of these flags, and rank those with more of them higher. Leave empty to keep everything. An API call passes the flag names from the README's flag table, e.g. <code>quote_today</code> (<code>quoteToday</code> works too); an unknown name stops the run at once with the list of valid ones.",
            "items": {
              "type": "string",
              "enum": [
                "catalogue_match",
                "above_moq",
                "below_moq",
                "in_export_market",
                "quote_today",
                "few_quotes_left",
                "verified_buyer",
                "experienced_buyer",
                "has_attachments",
                "target_price_stated",
                "incoterm_stated",
                "customisation",
                "non_english"
              ],
              "enumTitles": [
                "Names one of your product lines",
                "Quantity at or above your MOQ",
                "Quantity below your MOQ",
                "Buyer in one of your export markets",
                "Quote today (last 48 h, seats left)",
                "Only 1–2 quote seats left",
                "E-mail verified buyer",
                "Experienced buyer",
                "Drawings / photos attached",
                "Target price stated",
                "Incoterm stated",
                "Logo / private label / packaging",
                "Not in English"
              ]
            }
          },
          "replyLanguage": {
            "title": "Quote reply language",
            "enum": [
              "buyer",
              "en"
            ],
            "type": "string",
            "description": "<b>Buyer's language</b> — a Spanish request gets a Spanish reply (AI tier). <b>English</b> — every reply in English. The rule-based reply (AI off) is always English.",
            "default": "buyer"
          },
          "draftReplies": {
            "title": "Draft a quote reply",
            "type": "boolean",
            "description": "On: every hot / warm buying lead gets a reply draft to paste into Alibaba's Quote-now form — only facts from <b>About your company</b>. Nothing is ever sent for you.",
            "default": true
          },
          "quotesPerDay": {
            "title": "Quotes I can send today (optional)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Your daily quote budget on Alibaba. Set it (e.g. <code>5</code>) and the run marks the leads most worth one of today's quotes — fit × buyer readiness × quotes left × freshness — as <code>quotePlan: today</code> with a rank and a reason, the rest <code>later</code> (view <i>Today's quotes</i>). 0 = off. Free — it changes no price.",
            "default": 0
          },
          "includeBuyerName": {
            "title": "Keep the buyer's name",
            "type": "boolean",
            "description": "Off: <code>buyerName</code> is left empty in every row — a person's name as Alibaba shows it. Turn it off when your CRM must not hold personal names.",
            "default": true
          },
          "llmProvider": {
            "title": "AI model access",
            "enum": [
              "apify",
              "byok"
            ],
            "type": "string",
            "description": "<b>Apify (no keys)</b> — the AI runs through Apify's model access; tokens are billed to your Apify account at OpenRouter's rates. <b>My own key</b> — your OpenAI / Anthropic / Gemini / Groq key: expect 1–3 AI checks per run on a free-tier key (the rest keep their rule score at the basic price); a paid key (billing on) assesses every buying lead. Measured 2026-10-22: ≈ 1.7–13.8 s per buying lead with a free google:gemini-3.5-flash-lite key (≈ 4–35 a minute; the pace varies by the hour) — pass timeoutSecs 870 for 50 leads.",
            "default": "apify"
          },
          "llmModel": {
            "title": "AI model",
            "type": "string",
            "description": "Leave empty for the default (<code>google/gemini-2.5-flash-lite</code> via Apify; <code>google:gemini-3.5-flash-lite</code> with your own key). Apify mode takes an OpenRouter slug such as <code>openai/gpt-4.1-mini</code>; own-key mode takes <code>provider:model</code>, e.g. <code>anthropic:claude-haiku-4-5-20251001</code>."
          },
          "llmApiKey": {
            "title": "Your API key (own-key mode only)",
            "type": "string",
            "description": "Required when <b>AI model access</b> is <i>My own API key</i>. Stored encrypted by Apify, never logged."
          },
          "aiCandidateMultiplier": {
            "title": "AI candidate pool (× max qualified)",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "API only — hidden on the form. How many of the best rule-scored buying requests get the AI pass, as a multiple of <b>Max qualified</b> — the best rule scores first. Higher = more thorough, slower, more tokens.",
            "default": 2
          },
          "sendAlertsTo": {
            "title": "Send alerts to (Slack, Discord, Teams, Google Chat, Telegram or webhook)",
            "type": "string",
            "description": "Paste one or more URLs, one per line — the service is detected from the address: a Slack or Discord channel webhook, a Teams Workflows or Google Chat space webhook, your Telegram bot's send link (<code>https://api.telegram.org/bot&lt;token&gt;/sendMessage?chat_id=@yourchannel</code>) or any other https URL (Zapier, Make, n8n, your CRM), which gets the buying leads as JSON. After every run with at least one new buying lead, the digest (how many are new, the top 10 with links) is posted there. Never sent for the free demo. Headers, batching and signing: <i>Delivery details (advanced)</i>."
          },
          "dedupeAcrossRuns": {
            "title": "Never output the same buying lead twice",
            "type": "boolean",
            "description": "Remembers every buying request you were charged for, by its RFQ id, in a named key-value store on your account, and skips it in future runs — a daily schedule delivers and charges only new requests.",
            "default": true
          },
          "dedupeTtlDays": {
            "title": "Deliver a buying lead again after (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "API only — hidden on the form. How long a delivered buying lead stays remembered. 0 = never deliver or charge it again (an RFQ id never comes back as a new request).",
            "default": 0
          },
          "historyDatasetName": {
            "title": "Keep a running log (dataset name)",
            "type": "string",
            "description": "Optional. Type a name (e.g. <code>alibaba-rfq-leads-ai-seen-log</code>) and every run appends its new buying leads with the date to that named dataset on your account — one list across months to connect to Google Sheets or your BI tool once. Empty = off. Costs nothing extra.",
            "default": ""
          },
          "sourceMode": {
            "title": "Where do the buying leads come from?",
            "enum": [
              "actor",
              "dataset",
              "list"
            ],
            "type": "string",
            "description": "<b>actor</b> — search the Alibaba RFQ board live: runs <code>blueskyscraper/alibaba-rfq-scraper</code> on your account, billed separately (≈ $0.002 per request). <b>dataset</b> — an existing dataset of any of the four Alibaba RFQ scrapers. <b>list</b> — RFQ rows you paste in. <b>Bring your own data:</b> rows or a dataset ID, and you pay only for the analysis — the source Actor is never run. The mode you choose always runs as chosen; only the untouched sample records next to products you typed switch to the live search (spend-capped). <code>{}</code> over the API runs the free demo — nothing charged.",
            "default": "actor"
          },
          "maxRequestsToRead": {
            "title": "Max buying requests to read",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Affects what you pay: how many RFQs the source reads in one live run, split across your product lines — ≈ $0.002 per request on your Apify account, so 200 ≈ $0.40. A scheduled run reads twice this when you leave the default (and its default spend cap doubles with it).",
            "default": 200
          },
          "autoSwitchToLive": {
            "title": "Typed search next to the sample starts the live search",
            "type": "boolean",
            "description": "API only — hidden on the form. On (default): search terms typed next to the untouched sample records start the live search (spend-capped; <code>OUTPUT.switchedToLive</code> names them). Off: the mode you send is the mode that runs — the sample stays the free demo and the status names the terms it did not search. API pipelines that must never start a paid read on their own: send <code>false</code>.",
            "default": true
          },
          "failOnSourceError": {
            "title": "Fail the run when the source delivers nothing",
            "type": "boolean",
            "description": "API only — hidden on the form. Off (default): a plan that cannot run the source Store Actor ends SUCCEEDED with 0 rows and <code>OUTPUT.ok: false</code> — a scheduled / API run also sends the refusal to <code>notifyEmail</code> and every <code>sendAlertsTo</code> channel (<code>OUTPUT.refusalAlerted</code>); a Console run shows the free sample scored on your products. On: the same run ends FAILED with the same message, so a schedule's or an API pipeline's failed-run alert fires. Turn it on for every schedule.",
            "default": false
          },
          "datasetId": {
            "title": "Dataset",
            "type": "string",
            "description": "Only for <b>dataset</b> mode. A dataset of blueskyscraper, apt_marble, xtracto or codingfrontend Alibaba RFQ scraper — pick it so the Actor is granted read access."
          },
          "itemsList": {
            "title": "Buying requests to process",
            "type": "array",
            "description": "Only for <b>list</b> mode. JSON array of RFQ rows with at least <code>title</code> (or <code>subject</code>); optional <code>rfqId</code>, <code>description</code>, <code>quantity</code>, <code>quantityUnit</code>, <code>buyerCountry</code>, <code>buyerCountryCode</code>, <code>postedAt</code>, <code>quotesLeft</code>, <code>buyerRating</code>, <code>buyerTags</code>, <code>quoteUrl</code> — the README's List-mode rows table."
          },
          "discoveryActorId": {
            "title": "Source Actor (advanced)",
            "enum": [
              "blueskyscraper/alibaba-rfq-scraper",
              "apt_marble/alibaba-rfq-scraper",
              "xtracto/alibaba-rfq-scraper",
              "codingfrontend/alibaba-rfq-scraper"
            ],
            "type": "string",
            "description": "The Alibaba RFQ scraper the live search runs on your account. <b>blueskyscraper</b> (default): $0.002 per request, no start fee, 2.7 % failed runs, country / age / open filters. <b>apt_marble</b>: $0.008 per request, the most filters. <b>xtracto</b>: $0.03 + $0.005 start, no country / age filters. <b>codingfrontend</b>: $0.00399 + $0.001 start, keyword searches may return nothing. Affects what you pay.",
            "default": "blueskyscraper/alibaba-rfq-scraper"
          },
          "discoveryInput": {
            "title": "Source Actor input",
            "type": "object",
            "description": "API only — hidden on the form. Only for <b>actor</b> mode, rarely needed: extra input passed to the source Actor as-is, on top of what the Actor builds from your products, countries and age window (e.g. <code>{\"onlyWithAttachments\": true}</code>). The live search runs that Store Actor on your Apify plan — if your plan cannot run Store Actors, paste your own RFQ rows in <b>list</b> mode (any plan)."
          },
          "maxToProcess": {
            "title": "Max candidates to process",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "API only — hidden on the form. Upper bound on how many buying requests are scored in one run after the free filters (controls run time). Default = 3 × max qualified."
          },
          "webhookUrl": {
            "title": "Webhook URL (optional)",
            "type": "string",
            "description": "Qualified buying leads are POSTed here as flat JSON rows (Zapier, Make, n8n, your CRM) — one per lead or batched. Stored encrypted — Zapier / Make hook URLs carry their secret in the path."
          },
          "webhookHeaders": {
            "title": "Webhook headers (optional)",
            "type": "object",
            "description": "API only — hidden on the form. Extra HTTP headers for the webhook, e.g. <code>{\"Authorization\": \"Bearer …\"}</code>. Stored encrypted by Apify, never logged."
          },
          "webhookBatchSize": {
            "title": "Webhook batch size",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "API only — hidden on the form. 1 = one POST per buying lead the moment it is ready. Higher = one POST per N buying leads.",
            "default": 1
          },
          "webhookSecret": {
            "title": "Webhook signing secret (optional)",
            "type": "string",
            "description": "API only — hidden on the form. Any random string. Every webhook POST then carries <code>X-Signature: sha256=&lt;HMAC-SHA256 of the raw body with this secret&gt;</code>, so your endpoint can verify it came from this Actor. Stored encrypted by Apify, never logged."
          },
          "dedupeStoreName": {
            "title": "Dedupe store name",
            "type": "string",
            "description": "Key-value store used for cross-run memory. Left at the default, the memory is kept per search (source, countries): adding a product line or rewording <code>sellerProfile</code> keeps it, so a scheduled run never re-delivers what you already have. Running it for several clients on one account, type one name per client.",
            "default": "alibaba-rfq-leads-ai-seen"
          },
          "discoveryTimeoutSecs": {
            "title": "Source run timeout, seconds (API only)",
            "minimum": 60,
            "maximum": 86400,
            "type": "integer",
            "description": "API only — hidden on the form. How long the source Store Actor may run before its partial results are used — never more than 60 % of the run's time left, so the AI, the charges and the digest keep the rest. Raise it (and the run timeout) when the status says the source stopped early.",
            "default": 3600
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL (API only)",
            "type": "string",
            "description": "API only — hidden on the form, where <code>sendAlertsTo</code> takes it. Slack incoming-webhook URL for the digest."
          },
          "discordWebhookUrl": {
            "title": "Discord webhook URL (API only)",
            "type": "string",
            "description": "API only — hidden on the form, where <code>sendAlertsTo</code> takes it. Discord channel webhook URL for the digest."
          },
          "teamsWebhookUrl": {
            "title": "Microsoft Teams webhook URL (API only)",
            "type": "string",
            "description": "API only — hidden on the form, where <code>sendAlertsTo</code> takes it. Teams Workflows webhook URL for the digest."
          },
          "googleChatWebhookUrl": {
            "title": "Google Chat webhook URL (API only)",
            "type": "string",
            "description": "API only — hidden on the form, where <code>sendAlertsTo</code> takes it. Google Chat space webhook URL for the digest."
          },
          "telegramUrl": {
            "title": "Telegram sendMessage link (API only)",
            "type": "string",
            "description": "API only — hidden on the form, where <code>sendAlertsTo</code> takes it. The bot's sendMessage link with its chat_id."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}