# Textile World Email Scraper (`leads-scraper/textile-world-email-scraper`) Actor

Textile World Email Scraper SD - Textile World Email Scraper is a lead generation tool that extracts leads with public contact emails, account names and profile URLs from Textile World results by keyword, location and email domain - Textile World email extractor.

- **URL**: https://apify.com/leads-scraper/textile-world-email-scraper.md
- **Developed by:** [Leads Scraper](https://apify.com/leads-scraper) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Textile World Email Scraper - public press and company contacts from textileworld.com

The Textile World Email Scraper collects publicly indexed contact emails that appear in Google search results for `textileworld.com`. Textile World is the long-running American textile trade magazine, covering mills, machinery, fibres, dyeing and finishing for the US and global industry.

Start with the honest framing. Textile World is a trade magazine rather than a supplier directory, so rows usually identify an article and carry a press or company contact.

That single fact shapes everything about this Actor. The Textile World Email Scraper is a press-and-editorial contact tool for the textile industry, not a bulk supplier list, and it should be chosen for that purpose.

The Textile World Email Scraper builds Google `site:textileworld.com` queries, reads the result pages through the Apify GOOGLE_SERP proxy, and extracts every address matching your domain filter. Expect a small, focused dataset rather than a large one.

#### A measured live result, stated plainly

A live Google run of the Textile World Email Scraper returned **4 result blocks, 1 row with account identity, 1 resolvable profile URL and 2 unique emails**. Those are observed figures from a real run, and they are deliberately not dressed up.

Four blocks is a small yield for the Textile World Email Scraper by any standard. A magazine domain simply does not carry the tens of thousands of company pages that a sourcing marketplace does, so there is far less for Google to index.

One handle out of four blocks follows from the same cause. Because Textile World is a trade magazine rather than a supplier directory, Google usually prints an article headline, so `username` arrives as `null` and `profileUrl` arrives empty.

If you need volume, this is the wrong starting point. Run [Fibre2Fashion Email Scraper](https://apify.com/neuro-scraper/fibre2fashion-email-scraper) or [Textile Infomedia Email Scraper](https://apify.com/leads-scraper/textile-infomedia-email-scraper) first and treat this Actor as a targeted supplement.

### Features of the Textile World Email Scraper

Every feature listed below is genuinely implemented. Nothing here is aspirational.

| Feature | What it means in practice |
|---|---|
| Google SERP parsing | Reads Google result pages through the Apify GOOGLE_SERP proxy. No browser, no JavaScript rendering |
| Structural block detection | Locates the `<h3>` title, then the smallest surrounding block. Does not depend on Google's CSS class names |
| Domain filter | Only emails ending in one of your `customDomains` values are kept |
| Query expansion | Base, quoted, `intitle:` and one variant per query modifier. Base queries run first |
| Global deduplication | An email seen once is never pushed twice, across every query and every page |
| Email normalisation | Understands `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` sign |
| Junk filter | Rejects placeholders such as `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` does not match inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Drops a hit that is only the tail of another email in the same block |
| Concurrency | An `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Retries | Up to 3 attempts per page, exponential backoff, a fresh proxy session per request |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty |
| Re-queueing | Blocked or failed queries are retried once at the end of the run |
| Resumable run | State is stored in the key-value store, keyed by a hash of the input, and saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Fallback parser | If Google's markup changes, the run degrades to "emails without account details" rather than "no emails" |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |
| Dataset output | Rows push immediately and export to CSV, JSON, Excel or XML from the Apify dataset |

Query expansion earns its keep on a small domain more than anywhere else. With only a few thousand indexed article pages, the Textile World Email Scraper needs every phrasing variant it can generate to reach them all.

Global deduplication matters for the same reason. A magazine republishes the same press contact across article, author, tag and archive pages, so without deduplication a tiny yield would look artificially inflated.

### How the Textile World Email Scraper works

The pipeline is six steps and nothing is hidden inside it.

1. It reads your input: keywords, location, email domains and limits.
2. It builds Google search queries with the `site:` operator against `textileworld.com`, for example `site:textileworld.com mill contact "@gmail.com" "North Carolina"`.
3. It fetches Google result pages through the Apify GOOGLE_SERP proxy using `aiohttp`, asynchronously.
4. It parses each result block structurally, finding the `<h3>` title and the smallest block around it.
5. It extracts emails from that block's text with a domain-filtered regex.
6. It deduplicates globally and pushes each lead straight into the Apify dataset.

The Textile World Email Scraper does **not** log into Textile World, does not use any Textile World API, and does not open the site in a browser. Every field comes from publicly indexed Google search results - titles, snippets and site labels, with no authentication and no cookies.

### Who the Textile World Email Scraper is built for

This is a textile trade-press tool. Its best users are the people who want to reach editors, press desks and the companies quoted in industry coverage.

Textile machinery vendors and fibre producers use the Textile World Email Scraper to find the press and marketing contacts attached to product launch coverage. PR and communications teams use it to build a textile media contact list.

Apparel brands and fabric agents use it differently, mining articles for the US mills, converters and finishers named in reporting. Dyeing and finishing chemical suppliers do the same for processing houses profiled in technical features.

Analysts and market researchers use it to collect corporate contacts from feature coverage. If you want supplier listings with company slugs, [Textile Infomedia Email Scraper](https://apify.com/leads-scraper/textile-infomedia-email-scraper) is the right tool instead.

### Input fields for the Textile World Email Scraper

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["textile manufacturer", "mill"]` | Search terms - niche, job title, industry |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com", "@yahoo.com"]` | Only emails on these domains are kept; the `@` is optional |
| `maxEmails` | integer 1-10000 | `20` | Stop after this many unique emails |
| `countryCode` | string | `""` | Two-letter country for the search proxy (US, GB, DE...) |
| `expandQueries` | boolean | `true` | Search each keyword x domain pair in several phrasings |
| `queryModifiers` | array | `["email", "contact", "export", "wholesale", "sales enquiries"]` | Extra words combined with each keyword when expansion is on |
| `maxPagesPerQuery` | integer 1-50 | `30` | Page cap per query |
| `maxConcurrency` | integer 1-20 | `5` | Parallel queries |

#### How the Textile World Email Scraper input fields actually behave

`keywords` for the Textile World Email Scraper should read like magazine subject matter, not like a product catalogue. The defaults `textile manufacturer` and `mill` work, and terms such as `nonwovens`, `yarn spinning`, `digital printing` or `sustainability` match how the publication actually writes.

`customDomains` is your biggest constraint here. US corporate and press contacts rarely use webmail, so adding `@outlook.com`, `@hotmail.com` and `@aol.com` widens what the Textile World Email Scraper can keep beyond the two defaults.

`queryModifiers` only fire when `expandQueries` is `true`. On a publisher domain the `contact` and `email` modifiers matter far more than `wholesale` or `export`, which are marketplace words.

`maxEmails` is a hard stop shared across the worker pool. Given the observed yield, a high value simply lets the run exhaust the expanded query set rather than producing more leads.

`maxConcurrency` and `maxPagesPerQuery` trade throughput against politeness. Defaults of 5 and 30 are more than enough for a domain this size.

### JSON input example for the Textile World Email Scraper

```json
{
  "keywords": ["nonwovens", "yarn spinning", "textile machinery"],
  "location": "North Carolina",
  "customDomains": ["@gmail.com", "@yahoo.com", "@outlook.com", "@aol.com"],
  "maxEmails": 50,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "export", "wholesale", "sales enquiries"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

That is a realistic trade-press configuration for the Textile World Email Scraper: three editorial subject terms, a US textile-belt location, `US` as the country code and a widened domain filter.

Note the modest `maxEmails`. Setting 5,000 on a magazine domain does not create leads that were never indexed, and a smaller ceiling keeps the run short.

### Output fields of the Textile World Email Scraper

Every dataset item carries all fourteen fields.

| Field | Meaning |
|---|---|
| `network` | Platform name |
| `keyword` | The keyword that produced the lead |
| `query` | The exact Google query used |
| `title` | Raw result title |
| `accountName` | Account label Google prints |
| `fullName` | Display name parsed from a profile-style title; empty for article-style results |
| `username` | URL-safe handle when the platform exposes one; otherwise `null` |
| `profileUrl` | Canonical account URL when a handle is known; otherwise empty |
| `url` | Direct platform link when exposed, else the profile URL |
| `description` | Bio or snippet text, cleaned of labels and counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain, for example `@gmail.com` |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email - verify before sending |
| `foundAt` | ISO 8601 UTC timestamp |

Most rows arrive with `username: null` and an empty `profileUrl`, exactly as the live run showed. When a handle is exposed the Textile World Email Scraper builds the canonical link as `https://www.textileworld.com/{username}/`.

Always check `possiblyTruncated` before you send. When it is `true`, Google's snippet ellipsis may have clipped the address and it should be confirmed on the source page.

### JSON output example from the Textile World Email Scraper

```json
[
  {
    "network": "Textile World",
    "keyword": "nonwovens",
    "query": "site:textileworld.com nonwovens contact \"@gmail.com\" \"North Carolina\"",
    "title": "Nonwovens capacity expands in the Carolinas - Textile World",
    "accountName": "Textile World",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "https://www.textileworld.com/textile-news/nonwovens/nonwovens-capacity-carolinas/",
    "description": "Feature on regional nonwovens investment. Media and company enquiry address printed with the release.",
    "email": "press.carolinanonwovens@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-29T12:41:07Z"
  },
  {
    "network": "Textile World",
    "keyword": "textile machinery",
    "query": "site:textileworld.com textile machinery \"contact\" \"@outlook.com\"",
    "title": "Piedmont Spinning Systems - company page - Textile World",
    "accountName": "Piedmont Spinning Systems",
    "fullName": "Piedmont Spinning Systems",
    "username": "piedmont-spinning-systems",
    "profileUrl": "https://www.textileworld.com/piedmont-spinning-systems/",
    "url": "https://www.textileworld.com/piedmont-spinning-systems/",
    "description": "Ring and open-end spinning systems supplier covering the US textile belt. Sales enquiries by email.",
    "email": "sales.piedmontspinning@outlook.com",
    "emailDomain": "@outlook.com",
    "possiblyTruncated": true,
    "foundAt": "2026-08-29T12:43:55Z"
  }
]
```

The first row is the normal Textile World Email Scraper case and the second is the exception. Plan any CRM import around article-shaped rows with a press or company address and no profile link.

### Use cases for the Textile World Email Scraper

| Audience | What they do with the data |
|---|---|
| PR and communications teams | Build a textile trade-media and press-desk contact list |
| Textile machinery vendors | Reach press and marketing contacts attached to product launch coverage |
| Fibre and polymer producers | Find companies named in technical features and material reporting |
| Apparel brands and fabric agents | Identify US mills, converters and finishers mentioned in articles |
| Dyeing and finishing chemical suppliers | Prospect processing houses profiled in technical coverage |
| Trade-show and conference organisers | Recruit speakers and exhibitors from named editorial topics |
| Market analysts and researchers | Collect corporate contacts from feature and market coverage |
| B2B content marketers | Map which textile topics generate published contact routes |

Each of these is outbound work aimed at an inbox that a company or publication put in public so that readers could reach it. That is the honest boundary of what the Textile World Email Scraper does.

### Targeting tips for the Textile World Email Scraper

Given the small index, precision beats breadth every time when tuning the Textile World Email Scraper.

Write `keywords` the way an editor would. Subject terms such as `nonwovens`, `sustainability`, `yarn spinning`, `knitting technology` and `dyeing and finishing` match published headlines far better than commercial phrases.

Use `location` for the US textile belt. `"North Carolina"`, `"South Carolina"`, `"Georgia"` and `"Alabama"` reflect where the magazine's mill coverage concentrates.

Set `countryCode` to `US`. Textile World is an American publication and running the search proxy from the US changes which of its pages Google prefers.

Keep expectations calibrated and pair the run. For volume, use [Fibre2Fashion Email Scraper](https://apify.com/neuro-scraper/fibre2fashion-email-scraper); for supplier profiles with clean slugs, use [Textile Infomedia Email Scraper](https://apify.com/leads-scraper/textile-infomedia-email-scraper).

### Limitations of the Textile World Email Scraper

Read all of these before your first run.

- Textile World is a trade magazine rather than a supplier directory, so rows usually identify an article and carry a press or company contact. The live run returned 4 blocks, 1 profile URL and 2 unique emails.
- Volume is low. This Actor is a supplement to a directory scraper, not a replacement for one.
- The Textile World Email Scraper only finds addresses that are **publicly visible in Google's index**. Anything Google has not indexed is invisible to it.
- Google caps a single query at roughly 300 results, which is exactly why query expansion exists and defaults to on.
- `possiblyTruncated: true` means Google's snippet ellipsis may have cut the email short. Verify it before sending.
- It requires the Apify GOOGLE_SERP proxy and cannot run without Apify proxy credentials.
- Free Apify plans are capped at 100 emails per run; paid plans are uncapped.
- `username` and `profileUrl` are only populated when Google exposes a handle. On a magazine domain it usually does not, so expect `username: null` and an empty `profileUrl` on most rows. That is a Google limitation, not a bug.
- Results vary with keywords, domains and location. No volume is guaranteed by the Textile World Email Scraper or by any Actor in this family.

### Responsible use of Textile World Email Scraper output

The addresses the Textile World Email Scraper surfaces are business and press contacts that companies and publishers put in public so that readers and buyers could reach them. Treat them accordingly.

Even in a B2B context, a named individual's work address is personal data under GDPR when that person is in scope, and US rules such as CAN-SPAM apply to commercial mail regardless. Record your lawful basis, identify yourself in the first line, and make the relevance obvious.

Honour opt-outs immediately and permanently, keep your list current, and follow the marketing rules of every market you contact. None of this is legal advice, and it does not replace your own compliance review.

### FAQ about the Textile World Email Scraper

#### How many results should I expect from the Textile World Email Scraper?

A live Google run returned 4 result blocks, 1 identified account, 1 profile URL and 2 unique emails on default settings. That is genuinely low, because Textile World is a trade magazine rather than a supplier directory. Volume scales with how many keyword and domain combinations you supply, but this domain will never behave like a marketplace, and no specific number is guaranteed.

#### Why do most rows have no profile URL?

Because the Google results are article pages rather than company profiles, so there is no company slug for the Actor to derive a handle from. Rows still carry `accountName`, `description` and the email itself.

#### Is the Textile World Email Scraper worth running at all?

Yes, for press and editorial contacts and for the companies named in US textile coverage. It is not the right choice if you want a large supplier list.

#### Does the Textile World Email Scraper log into Textile World or use its API?

No. It builds Google `site:textileworld.com` queries, fetches result pages through the Apify GOOGLE_SERP proxy and parses them. There is no browser, no login, no API and no cookies.

#### What is the fastest way to increase Textile World Email Scraper yield?

Widen `customDomains` well beyond the two webmail defaults, since US press and corporate contacts rarely use Gmail or Yahoo, and use editorial subject terms in `keywords`.

#### Should I use non-English keywords?

No. Textile World publishes in American English, so translated terms return nothing useful. Use `countryCode: "US"` and a textile-belt `location` instead.

#### Can the Textile World Email Scraper find addresses on a company's own domain?

Only if the address appears in the Google result block and you list that domain in `customDomains`. The filter compares the end of each address, so every domain you want must be in the array.

#### Why does the Textile World Email Scraper turn `expandQueries` on by default?

Google caps one query at roughly 300 results. Expansion runs base, quoted and `intitle:` variants plus one per modifier, which matters even more on a small domain. Base queries always run first.

#### Can I run the Textile World Email Scraper on a free Apify plan?

Yes. Free plans are capped at 100 emails per run, and paid plans are uncapped. Given the observed yield, that cap is unlikely to bind here.

#### What happens if a run is interrupted?

State is saved in the key-value store, keyed by a hash of your input, and written on Apify's `PERSIST_STATE`, `MIGRATING` and `ABORTING` events. Restarting with the same input resumes rather than starting over.

#### Which export formats are available?

Anything the Apify dataset supports - CSV, JSON, Excel and XML - plus the API for pushing rows straight into a CRM or media database.

#### Is the Textile World Email Scraper affiliated with Textile World?

No. It is an independent Actor that reads publicly indexed Google results and has no relationship with, or endorsement from, the publication.

### Related Actors

More email scrapers from the same B2B, Suppliers & Manufacturers family, built on the same Google SERP pipeline.

| Actor | What it collects |
|---|---|
| [Alibaba Email Scraper](https://apify.com/leads-scraper/alibaba-email-scraper) | Public contact emails from Alibaba |
| [DirectIndustry Email Scraper](https://apify.com/neuro-scraper/directindustry-email-scraper) | Public contact emails from DirectIndustry |
| [DIYTrade Email Scraper](https://apify.com/neuro-scraper/diytrade-email-scraper) | Public contact emails from DIYTrade |
| [ECPlaza Email Scraper](https://apify.com/neuro-scraper/ecplaza-email-scraper) | Public contact emails from ECPlaza |
| [Fibre2Fashion Email Scraper](https://apify.com/neuro-scraper/fibre2fashion-email-scraper) | Public contact emails from Fibre2Fashion |
| [Global Sources Email Scraper](https://apify.com/leads-scraper/global-sources-email-scraper) | Public contact emails from Global Sources |
| [GlobalSpec Email Scraper](https://apify.com/leads-scraper/globalspec-email-scraper) | Public contact emails from GlobalSpec |
| [HKTDC Sourcing Email Scraper](https://apify.com/neuro-scraper/hktdc-sourcing-email-scraper) | Public contact emails from HKTDC Sourcing |
| [IndiaMART Email Scraper](https://apify.com/leads-scraper/indiamart-email-scraper) | Public contact emails from IndiaMART |
| [IndustryStock Email Scraper](https://apify.com/neuro-scraper/industrystock-email-scraper) | Public contact emails from IndustryStock |
| [IQS Directory Email Scraper](https://apify.com/neuro-scraper/iqs-directory-email-scraper) | Public contact emails from IQS Directory |
| [Made-in-China Email Scraper](https://apify.com/leads-scraper/made-in-china-email-scraper) | Public contact emails from Made-in-China |
| [Taiwantrade Email Scraper](https://apify.com/leads-scraper/taiwantrade-email-scraper) | Public contact emails from Taiwantrade |
| [Textile Infomedia Email Scraper](https://apify.com/leads-scraper/textile-infomedia-email-scraper) | Public contact emails from Textile Infomedia |
| [Thomas Scientific Email Scraper](https://apify.com/leads-scraper/thomas-scientific-email-scraper) | Public contact emails from Thomas Scientific |
| [TradeKey Email Scraper](https://apify.com/neuro-scraper/tradekey-email-scraper) | Public contact emails from TradeKey |
| [Tradewheel Email Scraper](https://apify.com/leads-scraper/tradewheel-email-scraper) | Public contact emails from Tradewheel |
| [Wer Liefert Was Email Scraper](https://apify.com/leads-scraper/wer-liefert-was-email-scraper) | Public contact emails from wlw |
| [DirectIndustry Email and Phone Number Scraper](https://apify.com/neuro-scraper/directindustry-email-and-phone-number-scraper) | Emails and phone numbers from DirectIndustry |
| [DIYTrade Email and Phone Number Scraper](https://apify.com/neuro-scraper/diytrade-email-and-phone-number-scraper) | Emails and phone numbers from DIYTrade |
| [ECPlaza Email and Phone Number Scraper](https://apify.com/neuro-scraper/ecplaza-email-and-phone-number-scraper) | Emails and phone numbers from ECPlaza |
| [Fibre2Fashion Email and Phone Number Scraper](https://apify.com/neuro-scraper/fibre2fashion-email-and-phone-number-scraper) | Emails and phone numbers from Fibre2Fashion |
| [Global Sources Email and Phone Number Scraper](https://apify.com/leads-scraper/global-sources-email-and-phone-number-scraper) | Emails and phone numbers from Global Sources |
| [GlobalSpec Email and Phone Number Scraper](https://apify.com/neuro-scraper/globalspec-email-and-phone-number-scraper) | Emails and phone numbers from GlobalSpec |
| [HKTDC Sourcing Email and Phone Number Scraper](https://apify.com/neuro-scraper/hktdc-sourcing-email-and-phone-number-scraper) | Emails and phone numbers from HKTDC Sourcing |
| [IndiaMART Email and Phone Number Scraper](https://apify.com/leads-scraper/indiamart-email-and-phone-number-scraper) | Emails and phone numbers from IndiaMART |
| [IndustryStock Email and Phone Number Scraper](https://apify.com/neuro-scraper/industrystock-email-and-phone-number-scraper) | Emails and phone numbers from IndustryStock |
| [IQS Directory Email and Phone Number Scraper](https://apify.com/neuro-scraper/iqs-directory-email-and-phone-number-scraper) | Emails and phone numbers from IQS Directory |
| [Made-in-China Email and Phone Number Scraper](https://apify.com/leads-scraper/made-in-china-email-and-phone-number-scraper) | Emails and phone numbers from Made-in-China |
| [TradeKey Email and Phone Number Scraper](https://apify.com/neuro-scraper/tradekey-email-and-phone-number-scraper) | Emails and phone numbers from TradeKey |
| [wlw Email and Phone Number Scraper](https://apify.com/leads-scraper/wer-liefert-was-email-and-phone-number-scraper) | Emails and phone numbers from wlw |
| [DirectIndustry Phone Number Scraper](https://apify.com/neuro-scraper/directindustry-phone-number-scraper) | Public phone numbers from DirectIndustry |
| [DIYTrade Phone Number Scraper](https://apify.com/neuro-scraper/diytrade-phone-number-scraper) | Public phone numbers from DIYTrade |
| [ECPlaza Phone Number Scraper](https://apify.com/neuro-scraper/ecplaza-phone-number-scraper) | Public phone numbers from ECPlaza |
| [Fibre2Fashion Phone Number Scraper](https://apify.com/neuro-scraper/fibre2fashion-phone-number-scraper) | Public phone numbers from Fibre2Fashion |
| [Global Sources Phone Number Scraper](https://apify.com/leads-scraper/global-sources-phone-number-scraper) | Public phone numbers from Global Sources |
| [GlobalSpec Phone Number Scraper](https://apify.com/neuro-scraper/globalspec-phone-number-scraper) | Public phone numbers from GlobalSpec |
| [HKTDC Sourcing Phone Number Scraper](https://apify.com/neuro-scraper/hktdc-sourcing-phone-number-scraper) | Public phone numbers from HKTDC Sourcing |
| [IndiaMART Phone Number Scraper](https://apify.com/leads-scraper/indiamart-phone-number-scraper) | Public phone numbers from IndiaMART |
| [IndustryStock Phone Number Scraper](https://apify.com/neuro-scraper/industrystock-phone-number-scraper) | Public phone numbers from IndustryStock |
| [IQS Directory Phone Number Scraper](https://apify.com/neuro-scraper/iqs-directory-phone-number-scraper) | Public phone numbers from IQS Directory |
| [Made-in-China Phone Number Scraper](https://apify.com/leads-scraper/made-in-china-phone-number-scraper) | Public phone numbers from Made-in-China |

### Leave a review

If the Textile World Email Scraper saved you time, please leave a star rating and a short
review on the Actor page.

Reviews are how other buyers judge whether a tool works, and they tell us which features to
build next.

If something did not work, email <neurodata.apify@gmail.com>
instead - bugs get fixed faster than they get complained about.

# Actor input Schema

## `keywords` (type: `array`):

Search terms describing the Textile World accounts you want (niche, job title, industry).

## `location` (type: `string`):

Optional location phrase added to every query (e.g. "New York").

## `customDomains` (type: `array`):

Only emails ending with one of these domains are collected. With or without the leading @. Each domain is searched separately, so more domains means more results but a longer run - remove some for a faster, narrower search, or add your own (e.g. @company.com).

## `maxEmails` (type: `integer`):

Stop once this many unique emails have been collected.

## `countryCode` (type: `string`):

Two-letter country code for the search proxy (e.g. US, GB, DE). Empty for any.

## `expandQueries` (type: `boolean`):

Search each keyword x domain pair with several phrasings. Recommended - Google caps a single query at ~300 results.

## `queryModifiers` (type: `array`):

Extra words combined with each keyword when Expand queries is on. Tuned for Textile World.

## `maxPagesPerQuery` (type: `integer`):

Google rarely returns more than ~30 pages for one query.

## `maxConcurrency` (type: `integer`):

How many queries run in parallel.

## Actor input object example

```json
{
  "keywords": [
    "textile manufacturer",
    "mill"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "export",
    "wholesale",
    "sales enquiries"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `results` (type: `string`):

Records produced by Textile World Email Scraper, stored in the run's default dataset.

# 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 = {
    "keywords": [
        "textile manufacturer",
        "mill"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "export",
        "wholesale",
        "sales enquiries"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/textile-world-email-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 = {
    "keywords": [
        "textile manufacturer",
        "mill",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "export",
        "wholesale",
        "sales enquiries",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/textile-world-email-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 '{
  "keywords": [
    "textile manufacturer",
    "mill"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "export",
    "wholesale",
    "sales enquiries"
  ]
}' |
apify call leads-scraper/textile-world-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/textile-world-email-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/LNpmwMBbZAybwdfa6/builds/lBu0pFWxDfMHEfoNb/openapi.json
