# Qatar MOCI Business Map Scraper: منشأة اقتصادية Records, Stats (`getascraper/qatar-moci-business-map-scraper`) Actor

Collect public Qatar MOCI منشأة اقتصادية records from the Business Map: names, map coordinates, license data, statistics, new or void activity, and changes. Export clean JSON/CSV through Apify Dataset for Make, n8n, and Google Sheets. Skip generic directories. From $0.44 per 1,000 records.

- **URL**: https://apify.com/getascraper/qatar-moci-business-map-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.33 / 1,000 moci records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

## 🗺️ Qatar MOCI Business Map Scraper: منشأة اقتصادية Records, Stats

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#EEF7F5;border:1px solid #B7DDD6;border-top:4px solid #0F766E;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#134E4A;line-height:1.3">Turn Qatar's official business map into a clean research dataset.</span><br>
<span style="font-size:15px;color:#334155;line-height:1.6">Collect public establishments, map locations, license status, capital data, and license activity from the Qatar Ministry of Commerce and Industry.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B7DDD6;border-radius:10px 0 0 10px;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#0F766E">📍 Map-ready records</span><br><span style="font-size:12px;color:#334155">Names, addresses, municipalities, districts, and coordinates for public establishments.</span></td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B7DDD6;border-left:none;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#0F766E">📊 License intelligence</span><br><span style="font-size:12px;color:#334155">Status, issue dates, expiry dates, legal form, and published capital amounts.</span></td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B7DDD6;border-left:none;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#0F766E">🔔 Change monitoring</span><br><span style="font-size:12px;color:#334155">Run the same watchlist again and receive only new or changed public records.</span></td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B7DDD6;border-left:none;border-radius:0 10px 10px 0;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#0F766E">🧭 Focused runs</span><br><span style="font-size:12px;color:#334155">Start with a small filter and expand municipalities, types, or subtypes when needed.</span></td>
</tr>
</table>

Use the Actor for Qatar market research, local lead lists, territory planning, license monitoring, and map-based competitor research. It stays on public MOCI records and does not require a login.

### 🔍 What does this actor do?

The Qatar MOCI Business Map (businessmap.moci.gov.qa) is the official government portal listing every licensed establishment (منشأة اقتصادية) in Qatar. This Actor reads public records from that portal and returns them as a clean, structured dataset.

Rows include English and Arabic business names, map coordinates, license status and dates, capital amounts, and business type. Switch collection modes for license statistics, summary metrics, or daily new and void-license feeds.

### 🎯 Who is this for?

- **I am a Qatar sales team.** I need a focused list of establishments in one municipality and business category.
- **I am a market researcher.** I need official counts, capital totals, and license activity for a current market view.
- **I am a territory planner.** I need coordinates, districts, zones, and license status in a spreadsheet-ready export.
- **I manage a watchlist.** I need scheduled runs that show only new or updated public records.

### 🚀 How it works

<table width="100%">
<tr>
<td style="padding:16px;background:#EEF7F5;border:1px solid #B7DDD6;width:33.333%;vertical-align:top"><span style="color:#0F766E;font-size:12px;font-weight:800;letter-spacing:1px">STEP 1</span><br><strong style="color:#134E4A">Choose your public scope</strong><br><span style="color:#334155;font-size:13px">Select establishments, statistics, or license activity. Add municipalities and public categories.</span></td>
<td style="padding:16px;background:#FFFFFF;border:1px solid #B7DDD6;border-left:none;width:33.333%;vertical-align:top"><span style="color:#0F766E;font-size:12px;font-weight:800;letter-spacing:1px">STEP 2</span><br><strong style="color:#134E4A">Set the run size</strong><br><span style="color:#334155;font-size:13px">Keep the safe default or raise the record and response limits for a broader research export.</span></td>
<td style="padding:16px;background:#EEF7F5;border:1px solid #B7DDD6;border-left:none;width:33.333%;vertical-align:top"><span style="color:#0F766E;font-size:12px;font-weight:800;letter-spacing:1px">STEP 3</span><br><strong style="color:#134E4A">Review and reuse</strong><br><span style="color:#334155;font-size:13px">Download the dataset, open the matching view, or schedule changes mode for the same watchlist.</span></td>
</tr>
</table>

### 🎛️ Input

| Field                   | Type                 | Required | Description                                                                                          |
| ----------------------- | -------------------- | -------: | ---------------------------------------------------------------------------------------------------- |
| `operation`             | enum                 |       No | Choose establishments, license statistics, portal summary, new licenses, or void or closed licenses. |
| `municipalities`        | array of strings     |       No | Public municipality names or IDs. Empty means all municipalities for supported map operations.       |
| `businessTypes`         | array of strings     |       No | Public MOCI business type names or IDs, such as Commercial or Services.                              |
| `businessSubtypes`      | array of strings     |       No | Public MOCI subtype names or IDs, such as Studio.                                                    |
| `licenseStatuses`       | array of enum values |       No | Keep Active, Expired, or both statuses in establishment and statistics runs.                         |
| `nationalityGroup`      | enum                 |       No | Optional public classification: All, Qatari, GCC, or International.                                  |
| `registrationFrom`      | date                 |       No | Lower bound for registration issue dates.                                                            |
| `registrationTo`        | date                 |       No | Upper bound for registration issue dates.                                                            |
| `expiryFrom`            | date                 |       No | Lower bound for license expiry dates.                                                                |
| `expiryTo`              | date                 |       No | Upper bound for license expiry dates.                                                                |
| `includeTaxIdentifiers` | boolean              |       No | Include a public tax registration number when available. Off by default.                             |
| `runMode`               | enum                 |       No | Snapshot returns the bounded result set. Changes returns new or updated rows only.                   |
| `monitorScope`          | string               |       No | Name a separate change history for a watchlist.                                                      |
| `maxItems`              | integer              |       No | Maximum dataset rows to emit, from 1 to 250.                                                         |
| `maxResponseSizeMb`     | integer              |       No | Stop if the source response is larger than the selected limit.                                       |
| `requestDelayMs`        | integer              |       No | Pause between source requests, from 250 to 5,000 milliseconds.                                       |

The default run uses Doha Municipality, the public Studio subtype, Active licenses, and a maximum of 10 records. This makes the first run quick and easy to verify. Broader map responses can be much larger.

### 🧾 Data table

| Field                                         | Type                   | Description                                                                   |
| --------------------------------------------- | ---------------------- | ----------------------------------------------------------------------------- |
| `companyName`                                 | string                 | English business name, falling back to the published Arabic name when needed. |
| `businessNameEnglish`                         | string                 | Published English business name.                                              |
| `businessNameArabic`                          | string                 | Published Arabic business name.                                               |
| `businessType`                                | string                 | English business type.                                                        |
| `businessSubtype`                             | string                 | English business subtype.                                                     |
| `municipality`                                | string                 | English municipality name.                                                    |
| `district`                                    | string                 | English district name.                                                        |
| `latitude`, `longitude`                       | number                 | Public map coordinates when supplied by MOCI.                                 |
| `licenseStatus`                               | string                 | Public English license status.                                                |
| `registrationStatus`                          | string                 | Public English registration status.                                           |
| `licenseNumber`                               | string                 | Public license identifier.                                                    |
| `businessRegistrationNumber`                  | string                 | Public business registration identifier.                                      |
| `capitalAmount`                               | number                 | Published capital amount.                                                     |
| `registrationIssueDate`, `licenseIssueDate`   | string                 | Published issue dates.                                                        |
| `registrationExpiryDate`, `licenseExpiryDate` | string                 | Published expiry dates.                                                       |
| `legalForm`                                   | string                 | Published English legal form.                                                 |
| `metricGroup`, `metricName`, `metricValue`    | string, string, number | Statistics or portal activity metric fields.                                  |
| `observedDate`                                | string                 | Date attached to a new or void-license activity row.                          |
| `changeType`                                  | string                 | `current`, `new`, or `updated`, depending on run mode.                        |
| `firstSeenAt`, `lastSeenAt`                   | string                 | Monitor timestamps for changed rows.                                          |
| `sourceUrl`                                   | link                   | Official Qatar MOCI Business Map source.                                      |

#### Example establishment record

```json
{
    "recordType": "establishment",
    "operation": "businesses",
    "companyName": "Doha Frames Printing Studio and Trading",
    "businessNameArabic": "الدوحة فرايمس برينتينغ استوديو اند ترايدينغ",
    "businessType": "Commercial",
    "businessSubtype": "Studio",
    "municipality": "Doha Municipality",
    "district": "Umm Lekhba",
    "licenseStatus": "Active",
    "licenseNumber": "248566",
    "capitalAmount": 0,
    "latitude": 25.34008032,
    "longitude": 51.465658679,
    "sourceUrl": "https://businessmap.moci.gov.qa/",
    "scrapedAt": "2026-09-23T08:06:39.660Z"
}
```

### 🗂️ Dataset views

The dataset has exactly three views:

- **🔍 Establishments:** business names, categories, locations, status, capital, coordinates, and license numbers.
- **📊 License analytics:** summary counts, type and status totals, and new or void-license activity.
- **🔄 Changes:** new and updated rows with first-seen and last-seen timestamps.

### 🔄 Snapshot and changes mode

Snapshot mode returns each unique row in the bounded result set. Changes mode keeps a separate history for each monitor scope. The first run reports new rows. Later runs report only source-backed updates or new rows. Unchanged rows are not emitted.

### 💰 Pricing

Pricing is pay-per-event with no subscription. Empty runs cost nothing. One event is charged for each establishment row, license statistics row, summary metric, or new and void-license activity row the Actor emits.

Visit the Store page to check current per-tier rates. Keeping the scope focused with narrow `municipalities`, `businessTypes`, and a realistic `maxItems` limit is the best way to stay in a predictable cost range.

### ⭐ Enjoying Qatar MOCI Business Map?

<table width="100%" style="display:table;width:100%">
<tr><td style="padding:18px 22px;background:#EEF7F5;border:1px solid #B7DDD6;border-left:4px solid #0F766E;border-radius:10px;color:#134E4A"><strong>If this Actor saves you a manual research session, please leave a short review.</strong><br><span style="color:#334155">Your feedback helps improve the Qatar data coverage and the default filters.</span><br><br><a href="https://apify.com/getascraper/qatar-moci-business-map-scraper#reviews" style="color:#0F766E;font-weight:700">Leave a review ↗</a></td></tr>
</table>

### 💡 Tips

- **Start with a focused filter.** The default run uses Doha Municipality and the Studio subtype with a limit of 10 records. Confirm the output format first, then raise `maxItems` or add more `municipalities` and `businessTypes`.
- **Use changes mode for ongoing watchlists.** Set `runMode` to "New and changed only" and give each watchlist a unique `monitorScope` name. Subsequent runs report only new or updated public records, keeping your dataset clean.
- **Narrow by date to find recent or expiring licenses.** Use `registrationFrom` and `registrationTo` to find newly opened businesses. Use `expiryFrom` and `expiryTo` to flag licenses expiring in a target period.
- **Guard against oversized responses.** Broad `municipalities` or `businessTypes` filters can return large non-paginated results. Keep `maxResponseSizeMb` at the default for exploratory runs and raise it only when you need a full export.

### ❓ FAQ

#### ما هي منشأة اقتصادية؟

It means an economic establishment. This is a public classification returned by the MOCI Business Map.

#### Can I collect all Qatar establishments?

Yes, but broad map filters can return a large source response. Use a municipality, type, subtype, status, date, or response-size limit first.

#### Does it include private owner information?

No. The Actor stays on public business fields. It does not search for hidden owners, personal profiles, or external website contacts.

#### How do I monitor a watchlist?

Choose Changes mode, keep the same filters and monitor scope, and schedule the Actor. The next run reports only new or updated public rows.

### 🛡️ Public data boundaries

The Actor uses information returned by the public MOCI Business Map. It does not access administrative pages, login-only records, hidden data, or external company websites. Tax registration numbers are optional and off by default. Missing fields stay missing.

The public map does not provide the same location filters for its daily license activity series. The run summary calls this out when those filters cannot be applied.

### 🔗 Other actors

- [Snupit South Africa Business Directory Scraper: Service Leads](https://apify.com/getascraper/snupit-business-directory-scraper) ↗ for public South African service-provider leads.
- [Grotal India Business Directory Scraper](https://apify.com/getascraper/grotal-business-directory-scraper) ↗ for city and category business listings.
- [Wyoming Business Search Scraper: Filings, Agent & Monitor](https://apify.com/getascraper/wyoming-business-registry-scraper) ↗ for official US business filing research and change monitoring.
- [US licensed contractor directory](https://apify.com/getascraper/us-licensed-contractor-directory) ↗ for public contractor license records.
- [Bizi.si Slovenia Scraper: Slovenska podjetja for Business Leads](https://apify.com/getascraper/bizi-si-business-scraper) ↗ for Slovenian company lead data.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/qatar-moci-business-map-scraper/changelog.md

# Actor input Schema

## `operation` (type: `string`):

Choose public establishment records, license statistics, portal summary metrics, or new and void license activity.

## `municipalities` (type: `array`):

Public MOCI municipality names or IDs. The default is deliberately narrow so the first run stays fast. Leave empty for all municipalities when using establishment or statistics mode.

## `businessTypes` (type: `array`):

Public MOCI business type names or IDs, such as Commercial or Services. Leave empty for all types.

## `businessSubtypes` (type: `array`):

Public MOCI subtype names or IDs, such as Studio. Leave empty for all subtypes. This filter is used for establishment records.

## `licenseStatuses` (type: `array`):

Keep only public records with the selected MOCI license statuses. Leave empty for all statuses.

## `nationalityGroup` (type: `string`):

Optional public nationality grouping used by the MOCI map filters. Leave set to All for no nationality filter.

## `registrationFrom` (type: `string`):

Optional YYYY-MM-DD lower bound for registration issue dates in establishment and new-license filters.

## `registrationTo` (type: `string`):

Optional YYYY-MM-DD upper bound for registration issue dates.

## `expiryFrom` (type: `string`):

Optional YYYY-MM-DD lower bound for license expiry dates in establishment and void-license filters.

## `expiryTo` (type: `string`):

Optional YYYY-MM-DD upper bound for license expiry dates.

## `includeTaxIdentifiers` (type: `boolean`):

Include a tax registration number only when the MOCI public response exposes it. Off by default because it is more sensitive than ordinary map and license fields.

## `runMode` (type: `string`):

Snapshot emits every matching row in the bounded result set. Changes emits only new or source-backed updated rows for the same monitor scope.

## `monitorScope` (type: `string`):

Use a different name to maintain separate change histories for different watchlists. Used only in changes mode.

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

Maximum number of dataset rows emitted per run. The default is intentionally small for safe scheduled tests.

## `maxResponseSizeMb` (type: `integer`):

Stop if a public API response exceeds this size. Broad map filters can return very large non-paginated responses.

## `requestDelayMs` (type: `integer`):

Pause between serialized portal and API requests to reduce load on the public service.

## Actor input object example

```json
{
  "operation": "businesses",
  "municipalities": [
    "Doha Municipality"
  ],
  "businessTypes": [],
  "businessSubtypes": [
    "Studio"
  ],
  "licenseStatuses": [
    "Active"
  ],
  "nationalityGroup": "",
  "registrationFrom": "",
  "registrationTo": "",
  "expiryFrom": "",
  "expiryTo": "",
  "includeTaxIdentifiers": false,
  "runMode": "snapshot",
  "monitorScope": "default",
  "maxItems": 10,
  "maxResponseSizeMb": 25,
  "requestDelayMs": 750
}
```

# Actor output Schema

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

No description

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

No description

## `monitorState` (type: `string`):

No description

# 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 = {
    "operation": "businesses",
    "municipalities": [
        "Doha Municipality"
    ],
    "businessTypes": [],
    "businessSubtypes": [
        "Studio"
    ],
    "licenseStatuses": [
        "Active"
    ],
    "nationalityGroup": "",
    "registrationFrom": "",
    "registrationTo": "",
    "expiryFrom": "",
    "expiryTo": "",
    "includeTaxIdentifiers": false,
    "runMode": "snapshot",
    "monitorScope": "default",
    "maxItems": 10,
    "maxResponseSizeMb": 25,
    "requestDelayMs": 750
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/qatar-moci-business-map-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 = {
    "operation": "businesses",
    "municipalities": ["Doha Municipality"],
    "businessTypes": [],
    "businessSubtypes": ["Studio"],
    "licenseStatuses": ["Active"],
    "nationalityGroup": "",
    "registrationFrom": "",
    "registrationTo": "",
    "expiryFrom": "",
    "expiryTo": "",
    "includeTaxIdentifiers": False,
    "runMode": "snapshot",
    "monitorScope": "default",
    "maxItems": 10,
    "maxResponseSizeMb": 25,
    "requestDelayMs": 750,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/qatar-moci-business-map-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 '{
  "operation": "businesses",
  "municipalities": [
    "Doha Municipality"
  ],
  "businessTypes": [],
  "businessSubtypes": [
    "Studio"
  ],
  "licenseStatuses": [
    "Active"
  ],
  "nationalityGroup": "",
  "registrationFrom": "",
  "registrationTo": "",
  "expiryFrom": "",
  "expiryTo": "",
  "includeTaxIdentifiers": false,
  "runMode": "snapshot",
  "monitorScope": "default",
  "maxItems": 10,
  "maxResponseSizeMb": 25,
  "requestDelayMs": 750
}' |
apify call getascraper/qatar-moci-business-map-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/qatar-moci-business-map-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/EvfpKEibfsWpmtIxA/builds/TBz6KZdOGLuNzUNDz/openapi.json
