# Alibaba RFQ & Buying Leads (`apt_marble/alibaba-rfq-scraper`) Actor

See what buyers around the world are trying to source right now. Every live Alibaba RFQ as one clean row: what the buyer wants, how much, which country, how many quote slots are still open and when it closes. Filter by market, industry, keyword and freshness.

- **URL**: https://apify.com/apt\_marble/alibaba-rfq-scraper.md
- **Developed by:** [Hamza](https://apify.com/apt_marble) (community)
- **Categories:** Lead generation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 buying lead collecteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Alibaba RFQ & Buying Leads

See what buyers around the world are trying to source right now. This actor
turns Alibaba's public RFQ board into a clean lead table: every live buying
lead as one row, with what the buyer wants, how many units, which country they
are buying into, which industry it belongs to, how fresh it is, how many quote
slots are still free and when the lead closes. For a manufacturer, a trading
company or a sourcing agency, that is an inbound sales pipeline you can filter,
sort and hand straight to the people who answer it. No account and no login are
needed — pick your markets, press start, and the leads arrive ready to work.

### What you can do with it

- **Fill a sales pipeline every morning.** Take everything posted in the last
  hour or the last 24 hours in your industry, and answer the freshest leads
  before your competitors see them.
- **Target the markets you actually ship to.** Keep only buyers in the United
  States, Germany, Brazil or any mix of 102 markets, and route each market to
  the salesperson who covers it.
- **Answer only what is still answerable.** Every lead carries how many quote
  slots are left, so you can drop the ones that are already full and spend your
  time on the ones that are open.
- **Size real demand before you invest.** Count how many buyers are looking for
  your product line this fortnight, in which countries, and for what quantities
  — a live demand signal, not a forecast.
- **Watch your competition.** Switch on the competition option and each lead
  shows how many suppliers already answered, where they are based, their trade
  badges and how long they have been paying members.
- **Feed a CRM or a sheet.** Every field is a plain column — export to Excel,
  Google Sheets, CSV or JSON in one click, or push it straight into your CRM.

### What you get

One row per buying lead. Abridged real example, with the optional exact dates
and competition attached:

```json
{
  "rfqId": "1846064064",
  "url": "https://sourcing.alibaba.com/rfq_detail.htm?id=1846064064",
  "subject": "Solid Wood 3-Seater Sofa with High Backrest and Armrests",
  "subjectIsShortened": false,
  "description": "I am looking to purchase a 1-piece wooden 3-seater sofa for home use.The focus is on solid wood construction and a classic design,similar to the styles shown in the images provided. ...",
  "descriptionIsShortened": true,
  "buyerCountry": "United Arab Emirates",
  "buyerCountryCode": "AE",
  "quantity": 1,
  "quantityUnit": "piece",
  "postedLabel": "1 days ago",
  "postedAt": "2026-08-08T20:25:59.000Z",
  "expiresAt": "2026-08-22T20:25:59.000Z",
  "expiresInLabel": "13D 8H",
  "quotesRemaining": 6,
  "extraQuoteSeats": 5,
  "quotesReceived": 4,
  "maxQuotes": 10,
  "qualityTier": 3,
  "qualityTierMax": 3,
  "hasAttachments": true,
  "buyerTags": ["emailConfirm", "typically_replies"],
  "status": "approved",
  "isHighValueLead": false,
  "isDetailEnriched": true,
  "quotingSupplierCount": 4,
  "quotingSupplierLocations": ["India", "China, Guangdong", "China, Jiangsu"],
  "quotingSupplierNamesWithheld": true,
  "quotingSuppliers": [
    {
      "quotedAt": "2026-08-08T11:23:55.000Z",
      "supplierNameMask": "K*******T",
      "supplierNameIsWithheld": true,
      "supplierLocation": "India",
      "supplierBusinessType": null,
      "supplierIsGoldMember": true,
      "supplierIsAssessed": false,
      "supplierPaidYears": 4
    }
  ],
  "firstQuoteAt": "2026-08-08T04:26:09.000Z",
  "latestQuoteAt": "2026-08-08T11:23:55.000Z",
  "matchedFilter": "whole board",
  "collectedAt": "2026-08-09T20:48:11.402Z"
}
```

### Input reference

| Field | Type | Default | What it does |
| --- | --- | --- | --- |
| `searchTerms` | list of text | — | Words that must appear in the lead, such as `solar panel`. Each term is collected on its own, so several terms multiply your coverage. Up to 20 per run. Leave empty for the whole board. |
| `buyerCountries` | list of select | — | Keep only leads posted by buyers in these markets — 102 to pick from. Several markets are collected separately and add up. Leave empty for every market. |
| `categories` | list of select | — | Keep only leads filed under these industries, from the site's 50. Accepts the industry name or its number. Leave empty for every industry. |
| `postedWithin` | select | Any time | Freshness window: last hour, 3 hours, 12 hours, 24 hours, 2 days, 3 days, 7 days, or older than 7 days. |
| `postingLanguage` | select | Any language | Keep only leads written in one language — useful when your team answers in one. |
| `qualityTier` | select | Any tier | The site grades leads into tiers. Silver and copper are the two published openly. |
| `onlyOpenRequests` | true/false | `true` | Skip leads that are already closed to new quotes. |
| `onlyWithAttachments` | true/false | `false` | Keep only leads where the buyer attached drawings, specifications or photos. |
| `onlyDetailedQuotesWanted` | true/false | `false` | Keep only leads where the buyer asked for a full quotation rather than an indication. |
| `newestFirst` | true/false | `true` | Put the most recently posted leads at the top. |
| `minQuotesRemaining` | number | `0` | Skip leads with fewer than this many free quote slots (0–10). |
| `addExactDates` | true/false | `false` | Add the exact moment each lead was posted and closes, how long is left, and how many quotes are already in. Billed as an enriched lead. |
| `includeQuoteCompetition` | true/false | `false` | Attach the suppliers already competing for the lead — location, trade badges, business type, years as a paying member and when each quote landed. Billed as an enriched lead. |
| `maxEnrichedLeads` | number | `1000` | Ceiling on how many leads get the extra detail above (maximum 20,000), so a big run cannot bill more than you expect. Leads past the ceiling are still collected, just without those fields. Set it to `0` and no lead is enriched and nothing is billed for enrichment, whatever the two switches above say. |
| `includeBuyerIdentity` | true/false | `false` | Include the name and picture of the person who posted the lead. That is personal data about an identified individual, so it is left out unless you switch it on. |
| `maxResults` | number | `200` | How many leads to collect in total (maximum 50,000). |
| `autoSliceBy` | select | By buyer market | When you ask for more than one filter combination publishes, split the job by buyer market (widest coverage) or by industry (best when you sell into one sector). Choose "do not split" to stop at the single-combination ceiling. |
| `maxPagesPerCombination` | number | `250` | A shallower ceiling per filter combination (1–250). Lower it for a fast, broad sample across many markets. |
| `country` | select | United States | Which country version of the site to read. The lead board is the same worldwide, so this rarely changes the result. |
| `parallelLeads` | number | `2` | How many leads to work on at the same time (1–4). |

### Output fields

| Field | Type | Description |
| --- | --- | --- |
| `rfqId` | text | The lead's stable identifier on the site. Safe to store and to match on between runs. |
| `url` | text | Direct link to the lead. |
| `subject` | text | What the buyer wants, in their own words. |
| `subjectIsShortened` | true/false | `true` when the board cut the title short. Roughly two in five titles are, so this tells you when what you see is not the whole title. |
| `description` | text | The buyer's summary of the job, as the board publishes it. |
| `descriptionIsShortened` | true/false | `true` when the board cut the summary short. The full text is not published anywhere public, so nothing is invented to fill the gap. |
| `buyerCountry`, `buyerCountryCode` | text | The market the buyer is buying into. `UK` and `GB` are normalised to one value. |
| `quantity`, `quantityUnit` | number / text | How much the buyer wants, and the unit they typed. The unit is in the buyer's own language, exactly as posted. |
| `postedLabel` | text | The site's own wording for the lead's age, such as `1 days ago`. |
| `postedAt` | text | Exact moment the lead was posted. Filled only when you switch on the exact dates. |
| `expiresAt`, `expiresInLabel` | text | Exact moment the lead closes to new quotes, and how long is left. Filled only when you switch on the exact dates. |
| `quotesRemaining` | number | Quote slots still free on this lead. |
| `extraQuoteSeats` | number | Additional slots the site can release beyond the standard allowance. |
| `quotesReceived`, `maxQuotes` | number | Quotes already accepted and the total the lead allows. Filled only with the exact dates switched on. |
| `qualityTier`, `qualityTierMax` | number | The site's own grade for the lead, and the top of that scale. |
| `hasAttachments` | true/false | Whether the buyer attached drawings, specifications or photos. |
| `buyerTags` | list | Trust signals the site publishes about the buyer, such as a confirmed address or a habit of replying. |
| `tierTags` | list | The site's own grading labels for the lead, passed through unchanged. |
| `imageUrl` | text | Reference picture the buyer attached, when there is one. |
| `relevanceScore` | number | The site's own ranking figure for the lead's position in the list you asked for. |
| `status` | text | Whether the lead is live on the board. Filled only with the exact dates switched on. |
| `isHighValueLead` | true/false | The site's own flag for a lead it considers high value. Filled only with the exact dates switched on. |
| `isDetailEnriched` | true/false | Whether the extra detail was successfully attached to this row. |
| `quotingSuppliers` | list | The suppliers already competing, one entry each: `quotedAt`, `quotedAtLabel`, `supplierNameMask`, `supplierNameIsWithheld`, `supplierLocation`, `supplierBusinessType`, `supplierIsGoldMember`, `supplierIsAssessed`, `supplierPaidYears`. |
| `supplierNameMask` | text | **Not a company name.** The site publishes competitors as a mask such as `K*******T`, and that mask is what comes back. Everything else about the competitor is real. |
| `quotingSupplierCount` | number | How many suppliers have already answered. |
| `quotingSupplierLocations` | list | Where those suppliers are based, de-duplicated. |
| `quotingSupplierNamesWithheld` | true/false | Confirms the competitor names were withheld by the site rather than missed. |
| `firstQuoteAt`, `latestQuoteAt` | text | When the first and most recent competing quotes landed. |
| `buyerName`, `buyerPhotoId` | text | The person who posted the lead. Present only when you switch on the buyer identity option. |
| `matchedFilter` | text | Which filter combination produced this row — the market, industry or search term it came from. |
| `collectedAt` | text | When the row was collected. |

### Pricing

You pay per lead returned. The extra detail is a separate, optional charge, and
only on leads where the detail actually arrived.

| What you pay for | Price |
| --- | --- |
| Each buying lead | $8.00 per 1,000 |
| Each lead with the extra detail attached | $4.00 per 1,000 |

**Worked example.** A daily prospecting run of 200 fresh leads in your industry
costs **$1.60**. Turn on the exact dates and the competition for all 200 and the
run costs **$2.40**. A 1,000-lead weekly sweep across five markets costs
**$8.00**, or **$12.00** with the extra detail on every lead. Leads that are
filtered out are never charged.

### Limits & what this actor cannot do

- **The board is a rolling two-week window.** Nothing older than fourteen days
  is published, and a lead disappears fourteen days after it was posted. This
  actor returns live leads; it cannot reach back into history, and no archive of
  past leads exists to be collected.
- **Any single combination of filters publishes at most 5,000 leads.** Asking
  for more is not refused — the job is automatically split across markets or
  industries so the total can be reached, and the split is printed in the run
  log before any work is done. The one thing that cannot be done is to pull more
  than 5,000 from one unfiltered sweep.
- **Long titles and summaries are published shortened.** The board cuts both
  and marks them with a trailing ellipsis — around two in five titles and four
  in five summaries. The complete text is not published publicly anywhere, so
  each row carries what is published plus a flag saying there is more.
  Nothing is guessed to fill it in, and no row is silently presented as
  complete when it is not.
- **Competitor company names are withheld by the source.** Suppliers who already
  quoted come back as a mask such as `K*******T`. That is the site's own
  masking, not a gap in collection — their country and province, business type,
  trade badges, paying-member years and quote timing are all real and are all
  returned. No name is ever reconstructed or guessed.
- **The buyer's own company profile and contact details are not public.** The
  site keeps them behind a members-only wall, so they are not returned. What you
  get is the person's display name and picture, and only if you ask for them.
- **The site's top lead grades are members-only.** Silver and copper are the two
  tiers published openly; the higher grades cannot be filtered on without an
  account, so they are not offered as an option.
- **Exact posting and closing moments are an optional extra.** Without them each
  lead still carries the site's own wording for its age, such as `3 days ago`.
- **The headline "leads found" figure the site shows is an estimate.** It moves
  by hundreds within a single minute, so it is never reported as a count and
  never used to decide when a job is finished.
- **Everything here is a snapshot.** Quote slots fill, leads close and new ones
  appear continuously; two runs an hour apart will not return the same table.
- **Speed depends on the size of the job and on the source site's own response
  times.** No fixed throughput is promised.
- **The source site's terms govern automated access.** You are responsible for
  using the data lawfully and in line with those terms, and for handling any
  personal data — including a buyer's name — in line with applicable privacy
  law.

### FAQ

**Do I need an account on Alibaba?**
No. Nothing is signed in to and nothing is bought.

**Does it need my login or password?**
No. There is no place to enter one, and none is ever used.

**Can I schedule it?**
Yes — and this is the actor most worth scheduling. Save your markets and
industries as a task and run it hourly or every morning with the freshness
filter set to the last hour or the last 24 hours, so you see new leads while
quote slots are still free.

**Is the data complete?**
It is everything the board publishes inside its rolling two-week window, for the
filters you chose. It is not a historical archive, because the site does not
keep one publicly. For very large pulls the job is split across markets or
industries and the plan is printed before collection starts, so you can see
exactly what was covered.

**Why do the suppliers who already quoted show up as `K*******T`?**
Because that is exactly what the site publishes. Competitor names are masked at
source. Rather than drop the row or invent a name, the mask is returned as a
mask, in a field named so it cannot be mistaken for a company name, alongside
the competitor facts that are real — location, business type, badges, years and
timing.

**How do I collect more than 5,000 leads?**
Choose several buyer markets, several industries or several search terms, or
just raise the total and leave the automatic split on. Each combination is
collected separately and the results are de-duplicated, so the totals add up
instead of repeating.

**Why is `postedAt` empty on some rows?**
Because the exact dates are an optional extra and were either switched off or
capped by the enriched-lead ceiling. Those rows still carry the site's own age
wording in `postedLabel`, and `isDetailEnriched` tells you which is which.

# Actor input Schema

## `searchTerms` (type: `array`):

Words that must appear in the buying lead, such as "solar panel" or "cotton t-shirt". Each term is collected separately, so several terms multiply your coverage. Leave empty to take the whole board.

## `buyerCountries` (type: `array`):

Only keep leads posted by buyers in these markets. Choosing several markets is also how you go past the volume any single filter combination publishes — each market is collected on its own. Leave empty for every market.

## `categories` (type: `array`):

Only keep leads filed under these industries. Like markets, several industries are collected separately and add up. Leave empty for every industry.

## `postedWithin` (type: `string`):

Only keep leads posted inside this window. Fresh leads matter here — the board keeps a lead for two weeks and then drops it.

## `postingLanguage` (type: `string`):

Only keep leads written in this language. Useful when your sales team answers in one language.

## `qualityTier` (type: `string`):

The source grades buying leads into tiers. Silver and copper are the two tiers published openly; the higher grades are reserved for signed-in members and cannot be collected.

## `onlyOpenRequests` (type: `boolean`):

Skip leads that have already closed to new quotes. On by default, because a closed lead is not a sales opportunity.

## `onlyWithAttachments` (type: `boolean`):

Keep only leads where the buyer attached drawings, specifications or photos. These are usually the more serious ones.

## `onlyDetailedQuotesWanted` (type: `boolean`):

Keep only leads where the buyer asked for a complete quotation rather than an indication.

## `newestFirst` (type: `boolean`):

Order the board with the most recently posted leads at the top.

## `minQuotesRemaining` (type: `integer`):

Skip leads with fewer than this many free quote slots left. A lead with no slots left cannot be answered.

## `addExactDates` (type: `boolean`):

The board itself only says "5 days ago". Switch this on and every lead also gets the exact moment it was posted, the exact moment it closes, how long is left, and how many quotes it has already received. Billed as an enriched lead.

## `includeQuoteCompetition` (type: `boolean`):

Attach the suppliers who have already answered this lead — their country and province, trade badges, years as a paying member, business type and the exact moment each quote landed. Company names are withheld by the source and come back as a mask, never as a name. Billed as an enriched lead.

## `maxEnrichedLeads` (type: `integer`):

A ceiling on how many leads get the extra detail above, so a large run cannot bill more than you expect. Leads beyond this ceiling are still collected, just without the extra fields. Set it to 0 to turn the extra detail off entirely, whatever the two switches above say.

## `includeBuyerIdentity` (type: `boolean`):

The board shows the name and photo of the person who posted each lead. That is personal data about an identified individual, so it is left out unless you switch this on, and you are responsible for handling it lawfully.

## `maxResults` (type: `integer`):

How many leads to collect in total. Any single filter combination publishes at most 5,000 leads, so beyond that the actor automatically splits the job across markets or industries and tells you how in the run log.

## `autoSliceBy` (type: `string`):

When you ask for more leads than one filter combination publishes, split the job by buyer market (widest coverage) or by industry (best when you sell into one sector). Choose "do not split" to stop at the single-combination ceiling.

## `maxPagesPerCombination` (type: `integer`):

A lower ceiling on how deep to read each filter combination. Leave at the maximum unless you want a fast, shallow sample of many markets.

## `country` (type: `string`):

Which country version of the site to read. The sourcing board is the same worldwide, so this rarely changes the result; it is here for when you want results collected as a buyer in a specific country would see them.

## `parallelLeads` (type: `integer`):

How many leads to work on at the same time. The default is a good balance; raising it collects faster but the source may slow down under pressure.

## Actor input object example

```json
{
  "searchTerms": [
    "solar panel"
  ],
  "buyerCountries": [],
  "categories": [],
  "postedWithin": "any",
  "postingLanguage": "any",
  "qualityTier": "any",
  "onlyOpenRequests": true,
  "onlyWithAttachments": false,
  "onlyDetailedQuotesWanted": false,
  "newestFirst": true,
  "minQuotesRemaining": 1,
  "addExactDates": true,
  "includeQuoteCompetition": false,
  "maxEnrichedLeads": 1000,
  "includeBuyerIdentity": false,
  "maxResults": 100,
  "autoSliceBy": "country",
  "maxPagesPerCombination": 250,
  "country": "us",
  "parallelLeads": 2
}
```

# Actor output Schema

## `leads` (type: `string`):

Every sourcing lead collected in this run.

## `runSummary` (type: `string`):

Leads collected, filter combinations read, and anything that could not be read.

## `openInConsole` (type: `string`):

The run's own page.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "solar panel"
    ],
    "buyerCountries": [],
    "categories": [],
    "postedWithin": "any",
    "postingLanguage": "any",
    "qualityTier": "any",
    "onlyOpenRequests": true,
    "onlyWithAttachments": false,
    "onlyDetailedQuotesWanted": false,
    "newestFirst": true,
    "minQuotesRemaining": 1,
    "addExactDates": true,
    "includeQuoteCompetition": false,
    "maxEnrichedLeads": 1000,
    "includeBuyerIdentity": false,
    "maxResults": 100,
    "autoSliceBy": "country",
    "maxPagesPerCombination": 250,
    "country": "us",
    "parallelLeads": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("apt_marble/alibaba-rfq-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["solar panel"],
    "buyerCountries": [],
    "categories": [],
    "postedWithin": "any",
    "postingLanguage": "any",
    "qualityTier": "any",
    "onlyOpenRequests": True,
    "onlyWithAttachments": False,
    "onlyDetailedQuotesWanted": False,
    "newestFirst": True,
    "minQuotesRemaining": 1,
    "addExactDates": True,
    "includeQuoteCompetition": False,
    "maxEnrichedLeads": 1000,
    "includeBuyerIdentity": False,
    "maxResults": 100,
    "autoSliceBy": "country",
    "maxPagesPerCombination": 250,
    "country": "us",
    "parallelLeads": 2,
}

# Run the Actor and wait for it to finish
run = client.actor("apt_marble/alibaba-rfq-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "solar panel"
  ],
  "buyerCountries": [],
  "categories": [],
  "postedWithin": "any",
  "postingLanguage": "any",
  "qualityTier": "any",
  "onlyOpenRequests": true,
  "onlyWithAttachments": false,
  "onlyDetailedQuotesWanted": false,
  "newestFirst": true,
  "minQuotesRemaining": 1,
  "addExactDates": true,
  "includeQuoteCompetition": false,
  "maxEnrichedLeads": 1000,
  "includeBuyerIdentity": false,
  "maxResults": 100,
  "autoSliceBy": "country",
  "maxPagesPerCombination": 250,
  "country": "us",
  "parallelLeads": 2
}' |
apify call apt_marble/alibaba-rfq-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,apt_marble/alibaba-rfq-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/vzX99KaexPTqrJHfz/builds/krwrQG4gVhwPJtVDZ/openapi.json
