AgriTech B2B Buyer Discovery
Under maintenancePricing
$29.00/month + usage
AgriTech B2B Buyer Discovery
Under maintenanceFind international B2B buyers for agricultural commodities on global trade directories
Pricing
$29.00/month + usage
Rating
0.0
(0)
Developer
Kundan Bhaskar
Maintained by CommunityActor stats
1
Bookmarked
8
Total users
0
Monthly active users
12 days ago
Last modified
Categories
Share
๐ฟ AgriTech B2B Buyer Discovery
Find international B2B buyers for agricultural commodities across global trade directories. Built for exporters of essential oils, spices, rice, organic products and other agricultural goods.
The actor searches five live B2B platforms, extracts buyer requests and supplier listings, filters them by country, quantity and age, removes duplicates, and returns one clean dataset sorted newest-first.
What it scrapes
| Platform | Key | Type | What it finds |
|---|---|---|---|
| Go4WorldBusiness | go4worldbusiness | B2B directory | ๐ Buying leads / RFQs from international buyers |
| Alibaba (RFQ) | alibaba_rfq | Global B2B | ๐ Buying requests from global buyers |
| TradeIndia (products) | tradeindia_products | B2B marketplace | ๐ญ Supplier listings & price intel |
| IndiaMart | indiamart | B2B marketplace | ๐ญ Supplier listings, prices, suppliers |
| Alibaba (product search) | alibaba_products | Global B2B | ๐ญ Supplier listings, prices, MOQs |
TradeIndia buy requirements are not included. That section (
/TradeLeads/buy/โฆ) now renders a "Sign in to access Buy Trade Leads" wall, and the older/buy-requirement/endpoint returns 404. There is nothing to scrape there without an account, so it is left out rather than shipped as a source that silently returns zero leads on every run.Alibaba product search serves a captcha to datacenter IPs. It needs residential proxies to return anything; the two RFQ sources and IndiaMart work without them.
Lead types
- ๐ Buying leads (RFQs) โ real purchase requests. These are your hot leads.
- ๐ญ Supplier listings โ competitor and market intelligence: who else sells this, at what price, from where.
Buying leads are ranked above supplier listings when they are the same age.
Who it's for
- ๐ฟ Essential oil distillers & exporters โ lemongrass, citronella, vetiver, eucalyptus, peppermint, tea tree
- ๐ถ๏ธ Spice exporters โ turmeric, black pepper, cardamom, cumin, chilli
- ๐ Rice & grain exporters โ basmati, non-basmati, organic
- ๐ฑ Organic product exporters โ moringa, ashwagandha, spirulina, herbs
- ๐ญ Agricultural commodity traders
- ๐ Export consultants and trade facilitation firms
- ๐จโ๐พ Farmer Producer Organisations (FPOs) looking for direct international buyers
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
commodities โ
| string[] | โ | Products to search for. One search per commodity, per platform. |
platforms | string[] | all | Restrict to specific platforms, using the keys in the table above. |
maxPages | integer | 3 | Result pages per commodity per platform (1โ20). |
maxResults | integer | 0 | Stop after this many leads. 0 means no limit. |
buyerCountries | string[] | [] | Keep only these countries. Empty means worldwide. |
includeUnknownCountries | boolean | true | When a country filter is set, whether to keep leads whose country the site did not publish. |
minOrderQuantityKg | integer | 0 | Drop leads below this quantity. Leads with no stated quantity are always kept. |
maxLeadAgeDays | integer | 90 | Drop leads older than this. Leads with no date are always kept. |
proxyConfig | proxy | Apify RESIDENTIAL | Residential proxies are strongly recommended โ these sites block datacenter IPs. |
blockImages | boolean | true | Skip images, fonts and video. Large saving in proxy traffic and run time. |
debugMode | boolean | false | Save the raw HTML of every page to the key-value store. |
Example input
{"commodities": ["lemongrass essential oil","citronella oil","basmati rice"],"buyerCountries": ["United States", "Germany", "Japan", "United Kingdom", "UAE"],"includeUnknownCountries": true,"maxPages": 3,"maxResults": 500,"minOrderQuantityKg": 25,"maxLeadAgeDays": 30,"proxyConfig": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Output
One dataset item per lead:
{"rank": 1,"leadId": "alibaba-rfq_3f8a2b1c","platform": "alibaba-rfq","leadType": "buying_lead","title": "Looking for Lemongrass Essential Oil - Steam Distilled, Origin India","description": "Natural ingredients distributor based in Frankfurt. Citral content minimum 75%.","commodity": "lemongrass essential oil","commodityMatchConfidence": "high","buyerCountry": "Germany","quantity": "500 Kilogram/Kilograms per month","quantityValue": 500,"quantityUnit": "kg","quantityKg": 500,"postedDate": "2025-03-15","postedDateRaw": "2 days ago","ageDays": 2,"contactUrl": "https://sourcing.alibaba.com/rfq/...","sourceUrl": "https://sourcing.alibaba.com/rfq/buying_request_list.htm?searchText=...","scrapedAt": "2025-03-17T08:30:00.000Z","searchQuery": "lemongrass essential oil","totalLeads": 134}
Field notes:
quantityKgโ the stated quantity converted to kilograms, ornullwhen the unit is countable (drums, cartons) or absent. Volume units assume an oil density of ~0.9 kg/L.postedDateโ ISOYYYY-MM-DD, ornullwhen the site's date could not be parsed. The original text is always kept inpostedDateRaw.commodityMatchConfidenceโhighwhen the commodity was found in the listing text,mediumwhen the lead is attributed to the search term alone.leadIdโ stable hash used for de-duplication across pages and platforms.
A RUN_SUMMARY record is written to the key-value store with per-platform, per-country and per-filter counts for the run.
Running it
On Apify
npm install -g apify-cliapify loginapify push
Locally
npm installnpx playwright install chromium # only needed outside the Docker image# Edit the local input, then run:# storage/key_value_stores/default/INPUT.jsonnpm start
Results land in storage/datasets/default/.
Tests
npm test # parser and filter unit testsnpm run lint
Troubleshooting
No leads in the dataset. The run log ends with a diagnosis naming the exact filter that removed everything, plus the countries that were actually found. The usual causes:
- Country filter too narrow โ clear
buyerCountries, or add the countries the log reports. - Blocked โ look for the
๐ซ BLOCKED by anti-bot protectionblock in the log. Go4WorldBusiness sits behind AWS WAF and Alibaba behind its own bot check; both refuse datacenter IPs, so a run without residential proxies will report them as blocked. This is reported separately from "no leads" on purpose: a blocked platform means the site refused the request, not that your commodity has no buyers. - Selectors are stale โ these directories redesign often.
Dropped โ off-topiccounts candidates the generic fallback found that did not mention your commodity, which is the signature of a redesign. Run withdebugMode: true, open the saved HTML in the key-value store to see what the scraper actually received, then update the selectors in src/platforms.js.
Leads look like navigation links. They should not: anything produced by the generic fallback has to mention one of your commodities before it is kept, and everything else is counted under Dropped โ off-topic. If junk still reaches the dataset, tighten that platform's containers selector.
Run is slow or expensive. Lower maxPages, set maxResults, or narrow platforms to just the buying-lead sources (go4worldbusiness, alibaba_rfq). Concurrency is deliberately capped at 3 pages with a 15 req/min ceiling to stay under the platforms' rate limits.
How it works
src/main.js Actor entry point: input, crawler, filtering, ranking, outputplatforms.js Per-platform selectors + the shared in-browser DOM walkerutils.js Quantity, date, country and commodity parsingcountries.js Country names and aliasesutils.test.js Unit tests
Every platform is scraped by the same DOM walker, parameterised by a selector bundle. It keeps only the innermost matching containers, so nested wrappers do not duplicate leads, and falls back to a generic walker when a platform's selectors return nothing โ which is what happens first when a site redesigns.
Adding a platform means adding one entry to PLATFORMS in src/platforms.js; no crawler changes are needed.
Legal
This actor collects publicly available business listings. It does not log in, bypass paywalls, or collect personal data. You are responsible for complying with each platform's terms of service and with the data protection law that applies to you when contacting the buyers you find.