# Yello UAE Scraper - UAE Business Directory (`crawlerbros/yello-uae-scraper`) Actor

Scrape Yello UAE (yello.ae), the UAE's largest business directory with 224,000+ companies. Search by category and/or emirate/city, or fetch full business profiles by URL. Get names, addresses, phone numbers, categories, ratings, working hours, and websites.

- **URL**: https://apify.com/crawlerbros/yello-uae-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Lead generation, Automation, Other
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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/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

## Yello UAE Scraper - UAE Business Directory

Scrape **Yello UAE** (yello.ae) — the UAE's largest business directory with 224,000+ companies. Search any business category and/or emirate/city and get names, addresses, phone numbers, ratings, and verification status. Optionally follow through to each business's full profile page for website, working hours, manager, establishment year, employee count, registration code, categories/tags, description, and photos. No login, no cookies, no API key required.

### What this actor does

- **Two modes:** `search` (category and/or city) and `detail` (direct business profile URLs)
- **110+ curated categories** to pick from, or type any custom category slug
- **All 7 emirates plus 4 major sub-cities** available as a one-click filter (Dubai, Abu Dhabi, Sharjah, Al Ain, Ajman, Ras Al Khaimah, Jebel Ali Free Zone, Fujairah, Umm Al Quwain, Dibba, Khor Fakkan)
- **Sort by** relevance, rating, or name (A-Z)
- **Filter by** "verified businesses only" or minimum star rating (1-5)
- **Rich business profiles** — full address, GPS coordinates, website (decoded from yello.ae's outbound tracking link), working hours, manager name, establishment year, employee-count bracket, registration code, listed categories, tags, description, photos, products/services, and individual written reviews
- **Empty fields are omitted** — you only ever see fields that were actually found for a business

### Output per business

- `name` — business name
- `category` — primary listed category, `categories[]` — all registered categories (when profile fetched)
- `tags[]` — free-text keyword tags the business added (when profile fetched)
- `rating`, `reviewCount` — average star rating (1-5) and total number of reviews
- `address` — full address text (mode=search); `street`, `city`, `country` — structured address (when profile fetched)
- `latitude`, `longitude` — GPS coordinates from the search-result map pin (mode=search); precise coordinates from the business profile (when profile fetched)
- `verified` — yello.ae's own "Verified" badge status
- `yearsWithUs` — years registered with yello.ae (also available from the search-result card, not only when profile fetched)
- `establishedYear` — year the business itself was established
- `photosCount` — number of photos on the business's yello.ae listing
- `phone`, `mobilePhone`, `fax` — contact numbers (when profile fetched)
- `website` — the business's own outbound website link, decoded from yello.ae's tracking redirect
- `workingHours[]` — structured opening hours (`{day, hours}` per weekday; when profile fetched)
- `manager` — company manager/owner name (when profile fetched)
- `employeeCount` — employee-count bracket, e.g. `"26-50"` (when profile fetched)
- `registrationCode` — business registration code (when profile fetched)
- `description` — company description (when profile fetched)
- `images[]`, `logoUrl` — business photos and logo (when profile fetched)
- `products[]` — products/services listed on the profile (`{name, description, price, imageUrl}`; when profile fetched and the business has any)
- `reviews[]` — individual written reviews (`{author, rating, title, text, date}`; when profile fetched and the business has any)
- `lastUpdated`, `registeredOn` — profile last-updated and yello.ae registration timestamps (when profile fetched and the "Verified Business" panel is present)
- `searchCategory`, `searchLocation` — the search parameters used (mode=search)
- `sourceUrl` — canonical yello.ae profile URL for the business
- `recordType: "business"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string (select) | `search` | `search` (category and/or city) or `detail` (fetch by URL) |
| `category` | string (select) | `restaurants` | Pick a common category, or `custom` to use `customCategory`, or leave empty to browse by city only (mode=search) |
| `customCategory` | string | – | Any free-text category slug, overrides `category` (mode=search) |
| `city` | string (select) | – | Emirate/city to search in, or leave empty for nationwide (mode=search) |
| `customCity` | string | – | Any free-text city slug, overrides `city` (mode=search) |
| `sortBy` | string (select) | `relevance` | `relevance` / `rating` (highest first) / `name` (A-Z) — applied client-side across the fetched batch |
| `verifiedOnly` | boolean | `false` | Only return businesses with yello.ae's "Verified" badge |
| `minRating` | integer | `0` (no minimum) | Only return businesses rated at least 1-5 stars |
| `fetchDetails` | boolean | `false` | Also visit each business's profile page for richer data (slower) |
| `businessUrls` | array | – | yello.ae profile URLs to fetch directly (mode=detail) |
| `maxItems` | int | `20` | Hard cap on returned records (1-1000) |

#### Example: search restaurants in Dubai

```json
{
  "mode": "search",
  "category": "restaurants",
  "city": "dubai",
  "maxItems": 20
}
```

#### Example: highest-rated dentists in Abu Dhabi, with full profiles

```json
{
  "mode": "search",
  "category": "dentists",
  "city": "abu-dhabi",
  "sortBy": "rating",
  "fetchDetails": true,
  "maxItems": 30
}
```

#### Example: verified 4+ star hotels across the whole UAE

```json
{
  "mode": "search",
  "category": "hotels",
  "verifiedOnly": true,
  "minRating": 4,
  "maxItems": 50
}
```

#### Example: all businesses in Sharjah (no category filter)

```json
{
  "mode": "search",
  "category": "",
  "city": "sharjah",
  "maxItems": 50
}
```

#### Example: fetch specific business profiles

```json
{
  "mode": "detail",
  "businessUrls": [
    { "url": "https://www.yello.ae/company/344843/cafe-torino" }
  ]
}
```

### Use cases

- **Local lead generation** — build a prospect list of UAE businesses by trade and emirate for B2B outreach
- **Market research** — measure business density and average ratings for a category across UAE regions
- **Directory aggregation** — feed structured UAE business data into your own local-search product
- **Competitor mapping** — see who else operates in a category and area, with ratings and contact info
- **Franchise & site-selection analysis** — evaluate service-business coverage across emirates and cities

### Limitations

- **`sortBy` is applied client-side.** yello.ae's search-results pages don't expose a server-side sort parameter, so `rating`/`name` sorting is applied across the batch of records this run actually fetched, not the entire category.
- **`verifiedOnly` and `minRating` are applied client-side.** A business with no rating on yello.ae is only excluded by `minRating` (which requires a rating to compare against).
- **`website` reflects the business's own self-submitted link, as-is.** yello.ae stores this as an outbound tracking redirect which this actor decodes back to the real destination URL; the destination itself is whatever the business owner entered and is not validated by yello.ae or this actor (occasionally a business lists a social-media page instead of a proper website).
- **E-mail addresses and WhatsApp numbers are not included.** yello.ae gates both behind its paid "Data Hub" product / a sign-in "Send Enquiry" form; they are not present in the publicly accessible HTML, so this actor cannot populate them.
- **`reviews[]` and `products[]` are only available with `fetchDetails: true` (search mode) or `mode: detail`**, and only for businesses that have any — yello.ae's search-results cards only expose the aggregate `rating`/`reviewCount`, not individual review text or product listings; both live on the business profile page.

### FAQ

**What data source does this actor use?**
It reads the publicly available search and business-profile pages on yello.ae (note: this is `yello.ae`, not `yellow.ae`, which is an unrelated parked domain). No account or API key is needed.

**Is this affiliated with yello.ae?**
No. This is an independent, third-party actor that reads publicly accessible pages.

**Why do some businesses have no rating, phone, or website?**
yello.ae only shows a rating once a business has received at least one review, and only shows contact/website details a business itself provided. Fields with no data are simply omitted from the record rather than shown as empty or null.

**Can I search a whole emirate instead of a single city?**
Yes — every value in the `city` dropdown (Dubai, Abu Dhabi, Sharjah, Al Ain, Ajman, Ras Al Khaimah, Fujairah, Umm Al Quwain) is itself an emirate or a major city within one; Jebel Ali Free Zone, Dibba, and Khor Fakkan are additional sub-city areas yello.ae tracks separately.

**Can I search all of the UAE at once?**
Yes — leave `city` empty (the default) for a nationwide search within a category.

**How accurate are the GPS coordinates?**
`latitude`/`longitude` come directly from the business's own yello.ae profile page (only available with `fetchDetails: true` in search mode, or always in `detail` mode).

**Why is `fetchDetails` off by default?**
Fetching each business's full profile page requires one extra request per result, which is slower. Turn it on when you need website, working hours, manager, establishment year, employee count, registration code, categories/tags, description, photos, products/services, or individual reviews.

**Does this actor need a proxy or login?**
No — yello.ae's search and profile pages are served without any anti-bot challenge, so this actor runs entirely on Apify's free plan with no proxy and no credentials.

# Actor input Schema

## `mode` (type: `string`):

What to fetch: search a category and/or city, or fetch full business profiles from direct yello.ae URLs.

## `category` (type: `string`):

Business category to search for. Pick a common category, or choose 'Custom category' and type your own below (mode=search). Leave 'No category filter' + set a city to browse all businesses in that city.

## `customCategory` (type: `string`):

Free-text category slug not in the curated list above, e.g. 'locksmiths' or 'it-services' (mode=search). Takes priority over 'Category' when set. Use the slug shown in a yello.ae category URL (lowercase, hyphenated).

## `city` (type: `string`):

UAE emirate or city to search in. Combine with 'Category' to search a category within one city, or leave category empty to browse all businesses in the city (mode=search).

## `customCity` (type: `string`):

Free-text city slug not in the curated list above (mode=search). Takes priority over 'Emirate / city' when set.

## `sortBy` (type: `string`):

How to order search results after fetching (mode=search). yello.ae itself only returns relevance order, so 'rating' and 'name' are applied client-side across the fetched batch.

## `verifiedOnly` (type: `boolean`):

Only return businesses with yello.ae's own 'Verified' badge (mode=search).

## `minRating` (type: `integer`):

Only return businesses rated at least this many stars, e.g. 4 for 4.0+ (mode=search). 0 means no minimum. Businesses with no rating are excluded once this is set above 0.

## `fetchDetails` (type: `boolean`):

For each search result, also visit its business profile page to collect full address, website, working hours, manager, establishment year, employee count, registration code, categories/tags, description, and photos. Slower -- one extra request per result (mode=search).

## `businessUrls` (type: `array`):

Direct yello.ae business profile URLs to fetch, e.g. https://www.yello.ae/company/344843/cafe-torino. Use the 'sourceUrl' field from search results.

## `maxItems` (type: `integer`):

Hard cap on the number of business records to return.

## Actor input object example

```json
{
  "mode": "search",
  "category": "restaurants",
  "city": "",
  "sortBy": "relevance",
  "verifiedOnly": false,
  "minRating": 0,
  "fetchDetails": false,
  "businessUrls": [],
  "maxItems": 20
}
```

# Actor output Schema

## `businesses` (type: `string`):

Dataset containing all scraped yello.ae business listings.

# 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 = {
    "mode": "search",
    "category": "restaurants",
    "city": "",
    "sortBy": "relevance",
    "verifiedOnly": false,
    "minRating": 0,
    "fetchDetails": false,
    "businessUrls": [],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/yello-uae-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 = {
    "mode": "search",
    "category": "restaurants",
    "city": "",
    "sortBy": "relevance",
    "verifiedOnly": False,
    "minRating": 0,
    "fetchDetails": False,
    "businessUrls": [],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/yello-uae-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "mode": "search",
  "category": "restaurants",
  "city": "",
  "sortBy": "relevance",
  "verifiedOnly": false,
  "minRating": 0,
  "fetchDetails": false,
  "businessUrls": [],
  "maxItems": 20
}' |
apify call crawlerbros/yello-uae-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/yello-uae-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/OjYxBnnPruObfhTRy/builds/xvNl5nE5UoXzbHBP4/openapi.json
