Mexico Company Data — DENUE Business Directory (5M+)
Pricing
from $4.00 / 1,000 results
Mexico Company Data — DENUE Business Directory (5M+)
Search ~5M Mexican businesses from INEGI's official DENUE directory by keyword, location or activity. Name, economic activity, size band, full address, geo-coordinates + phone/email/website. Official open data — commercial reuse permitted. No API key needed.
Pricing
from $4.00 / 1,000 results
Rating
0.0
(0)
Developer
Berkan Kaplan
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
5
Monthly active users
5 days ago
Last modified
Categories
Share
Mexico Company Data — DENUE Business Directory (5M+)
Need real, geo-located B2B data for the Mexican market — not a scraped directory that breaks next week? This Actor turns DENUE — INEGI's official Directorio Estadístico Nacional de Unidades Económicas — into ready-to-use records: ~5 million business establishments with name, economic activity, size band, full address, exact geo-coordinates, and self-reported phone / email / website.
Built on INEGI's official REST API — no scraping, no fragile HTML, no API key to set up (a working token is built in). Data is released under INEGI's Términos de Libre Uso, which explicitly permit commercial reuse (attribution: Fuente: INEGI).
- 🇲🇽 ~5M establishments — DENUE's whole national directory, not a sample
- 📍 Exact geo-coordinates on every record — map, cluster or radius-search out of the box
- 📇 Self-reported contact — phone / email / website; ~62% have at least one (measured)
- ⚡ Official REST API, built-in token — no scraping, no key setup, one clean flat dataset (JSON / CSV / Excel / API)
Quick start (API)
Get 100 pharmacies in Jalisco that list contact info, in one call:
curl -X POST "https://api.apify.com/v2/acts/foxlabs~mexico-denue-company-data/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{ "keywords": ["farmacia"], "states": ["Jalisco"], "onlyWithContact": true, "maxResults": 100 }'
Prefer no code? Open the Input tab, set your filters, and click Start — then download the results.
What you get
One clean, flat record per establishment:
| Field | Type | Description |
|---|---|---|
name | string | Establishment / business name |
legalName | string | Razón social (legal entity name), where reported |
id / clee | string | INEGI establishment id + CLEE unique-establishment key |
activity | string | Economic activity — SCIAN class (e.g. Restaurantes con servicio de preparación de alimentos) |
sizeBand | string | Employee size stratum (e.g. 11 a 30 personas) |
establishmentType | string | Fixed / semi-fixed / mobile (Fijo / Semifijo / Móvil) |
street / exteriorNumber / interiorNumber | string | Street address parts |
neighborhood / postalCode | string | Colonia + CP (postal code) |
municipality / state | string | Municipality + state |
fullAddress | string | Ready-to-use single-line address |
latitude / longitude | number | Exact geo-coordinates |
phone / email / website | string | Self-reported contact (conservatively normalised; malformed values dropped) |
hasContact / contactMethods[] | bool / array | Contact presence + which channels are populated |
source / sourceUrl / license | string | Provenance: INEGI, the establishment's DENUE detail page, licence string |
scrapedAt | string | ISO timestamp of the run |
Missing values come back as null, never a guess.
Sample output
{"id": "6273041","clee": "14039000456789012","name": "Farmacia Guadalajara","legalName": "Farmacias Guadalajara, S.A. de C.V.","activity": "Comercio al por menor de productos farmacéuticos","sizeBand": "11 a 30 personas","establishmentType": "Fijo","street": "Avenida Vallarta","exteriorNumber": "1220","interiorNumber": null,"neighborhood": "Americana","postalCode": "44160","municipality": "Guadalajara","state": "Jalisco","fullAddress": "Avenida Vallarta 1220, Americana, 44160, Guadalajara, Jalisco, México","latitude": 20.6736,"longitude": -103.3688,"phone": "3336151234","email": "contacto@ejemplo-farmacia.mx","website": "https://www.ejemplo-farmacia.mx","hasContact": true,"contactMethods": ["phone", "email", "website"],"source": "INEGI DENUE (Directorio Estadístico Nacional de Unidades Económicas)","sourceUrl": "https://www.inegi.org.mx/app/mapa/denue/detalle.aspx?id=6273041","license": "INEGI Términos de Libre Uso — Fuente: INEGI","scrapedAt": "2026-07-05T09:12:44.101Z"}
Example inputs (copy & paste)
// 1) Lead list: pharmacies in Jalisco that list contact info{ "keywords": ["farmacia"], "states": ["Jalisco"], "onlyWithContact": true, "maxResults": 1000 }// 2) Everything around a point (≤ 5 km radius) — e.g. central Mexico City{ "location": { "latitude": 19.4326, "longitude": -99.1332, "radiusMeters": 1000 }, "maxResults": 2000 }// 3) A whole sector by SCIAN — restaurants (7225) across two states{ "scianCode": "7225", "states": ["Nuevo León", "Jalisco"], "maxResults": 5000 }// 4) Nationwide — hotels across all of Mexico (no states = whole country), contact only{ "keywords": ["hotel"], "onlyWithContact": true, "maxResults": 3000 }// 5) Multi-keyword lead list in one state — hardware & construction suppliers{ "keywords": ["ferretería", "materiales para construcción"], "states": ["Ciudad de México"], "onlyWithContact": true, "maxResults": 1500 }// 6) Browse a broad sector by 2-digit SCIAN — all retail (46) in a state by INEGI code (19 = Nuevo León){ "scianCode": "46", "states": ["19"], "maxResults": 10000 }// 7) Field-sales radius around Guadalajara — reachable prospects only{ "location": { "latitude": 20.6597, "longitude": -103.3496, "radiusMeters": 2000 }, "onlyWithContact": true, "maxResults": 1000 }
Input & filters
There are three ways to search — pick one, or combine a keyword/activity with states:
- Keywords — one or more business terms (Spanish works best):
restaurante,farmacia,hotel,ferretería. Combine with States to scope by region. - States — a Mexican state name or 2-digit INEGI code (
Jalisco,Ciudad de México,19). Leave empty to search the whole country. - Location radius —
{ latitude, longitude, radiusMeters }to pull every business around a point. Radius is capped at 5 km by the source API. - Activity (SCIAN) — a SCIAN code to browse an entire industry (
7225= restaurants,46= retail), with or without a keyword; combine with States. - Only businesses with contact info — keep only rows that reported at least one of phone / email / website (best for lead lists).
- Max results — 1–100,000.
- INEGI API token (optional) — a working token is built in; paste your own free token for heavy use.
Use cases
- B2B lead generation. You sell POS, delivery or supplies to restaurants. Filter
keywords: ["restaurante"]+ a state +onlyWithContact: true→ a CRM-ready list with phone/email/website and a size band to prioritise larger accounts — no manual list-building. - Local competitor mapping. Opening or benchmarking a store? Run a
locationradius around the site → every competitor in the catchment, each with exact coordinates and size band, ready to plot on a map. - Territory & site selection. Pull a whole
scianCodesector across your target states → measure density and mix of businesses by municipality and colonia to choose where to open. - Field-sales route planning. Query by keyword + state (or a location radius) and use the
latitude/longitudeon every record to cluster prospects by neighbourhood and build efficient visit routes. - Market sizing & research. Browse an entire SCIAN sector nationally → count establishments by state, size band and establishment type to size a market and spot where the players concentrate.
- Franchise & expansion scouting. Filter a category + states, then map where it is already dense versus underserved to guide expansion decisions.
Performance & throughput
Each search hits INEGI's official REST API directly — no proxies, no CAPTCHAs. A location-radius query is a single dense call, so it returns almost instantly. Keyword + state and SCIAN searches page through results in blocks of 1,000, so throughput scales with the size of your pull: a few thousand records complete in a minute or two, and large national pulls stream in steadily until they hit your maxResults. Throughput is bounded only by INEGI's API and your Apify plan; for sustained heavy volume, paste your own free INEGI token.
Integrations
JavaScript (apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('foxlabs/mexico-denue-company-data').call({keywords: ['farmacia'], states: ['Jalisco'], onlyWithContact: true, maxResults: 500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python (apify-client):
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("foxlabs/mexico-denue-company-data").call(run_input={"keywords": ["farmacia"], "states": ["Jalisco"], "onlyWithContact": True, "maxResults": 500,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["name"], item.get("phone"))
Also works with Make / n8n / Zapier (Apify app → run this Actor, map the input), scheduled runs, webhooks, and the Apify MCP server for AI agents.
Data quality (measured, not promised)
Live-measured on a 1,799-establishment sample across Mexico City, Guadalajara, Monterrey and Cancún:
| Field group | Fill rate |
|---|---|
| Core (name, activity, size band, full address, geo) | 100% |
| Any contact (phone / email / website) | ~62% |
| Phone · Email · Website | ~38% · ~37% · ~17% |
| Legal name (razón social) | ~42% |
Contact coverage rises with company size — for firms of 11+ employees, email reaches ~70–90% and website ~50–85%. Turn on Only businesses with contact info for lead-ready lists. Contact fields come only from what each business self-reported to INEGI — never fabricated; missing values are null.
Pricing
Pay per result — you're billed per establishment returned. Only businesses with contact info narrows the set to lead-ready records so you don't pay for rows you can't act on. There's an Apify free tier to evaluate the full feature set before you scale. No proxies or third-party costs — INEGI's API is free.
FAQ
Can I use this data commercially / resell it? Yes — DENUE is published under INEGI's Términos de Libre Uso, which explicitly permit commercial reuse and redistribution with attribution. Every record carries the required Fuente: INEGI string.
Do I need an INEGI API key or account? No. A working token is built in, so the Actor runs out of the box. For heavy, sustained use you can paste your own free token — inegi.org.mx issues one instantly by email.
How fresh is the data? Each run reads live from INEGI's DENUE API, so you get the directory as INEGI currently publishes it. INEGI refreshes DENUE periodically.
What export formats are available? JSON, CSV, Excel, or via the Apify API and integrations.
Does it include company directors, financials or ownership? No. DENUE is a directory of business establishments (locations), not a corporate registry — it does not carry directors, financials or ownership. Those live in other registries.
Why don't all records have a phone or email? Contact is self-reported by each business; about ~62% reported at least one channel and the rest reported none. We normalise contacts and drop obviously-malformed values rather than ship junk — and never fabricate them.
Can I pull a whole industry at once? Yes — pass a SCIAN code (e.g. 7225 for restaurants, 46 for retail), optionally scoped to states, to browse an entire sector.
Why is the location radius capped at 5 km? That's a hard limit of INEGI's radius endpoint. For city- or country-scale lists, use keyword or SCIAN search combined with states instead.
How many records can I get in one run? Up to 100,000 via maxResults. A single dense city block can already return thousands.
Is there a rate limit? No key or per-request limit on our side — throughput is bounded by INEGI's API and your Apify plan. Supply your own INEGI token for sustained heavy volume.
Troubleshooting
- 0 results → your keyword may be too specific or a state name misspelled. Use Spanish terms, broaden the keyword, drop
onlyWithContact, or switch to a SCIAN code to browse the whole sector. - Location search returns few rows → the radius is capped at 5 km. To cover a whole city, use keyword or SCIAN + state instead of a point radius.
- A business has no email or phone → about ~38% of establishments reported no contact at all; that's the source, not a miss (the value is
null, never fabricated). - A large pull is slow or stalls → keyword/SCIAN searches page in blocks of 1,000. Lower
maxResults, scope to fewer states, or paste your own free INEGI token to sustain higher volume.
Notes, limits & legal (honest)
- Establishments, not legal entities. DENUE is a directory of business locations; it does not include company directors, financials or ownership (those live in other registries).
legalName(razón social) is present for ~42% of records. - Contact is self-reported. ~62% of businesses list at least one contact method; the rest reported none. Phone/email/website are lightly normalised and obviously-malformed values are dropped rather than shipped — but occasional source typos exist. We never fabricate contact data.
- Radius search is capped at 5 km by the source API; use keyword-or-activity + state for country-scale lists.
- Attribution required. Each record carries
Fuente: INEGI; keep the attribution when you redistribute (a condition of the open licence). - Personal data. Some contacts (e.g. sole-trader phone/email) are personal data — use them lawfully, for legitimate B2B, research and marketing in line with applicable law.
- Not affiliated with INEGI or the Mexican government; this Actor redistributes their public open data.
Support
Questions, a field you'd like added, or a custom build? Open the Issues tab on this Actor, or email info@foxlabs.com.tr. We reply fast.
If this Actor saves you time, a ⭐ review really helps.
Changelog
0.2 — 2026-07-05
- Reworked docs: API quick-start, sample output, integrations, FAQ & troubleshooting.
0.1
- Initial release. Keyword+state, location-radius and SCIAN-activity search over DENUE's ~5M establishments; clean firmographics + address + geo + normalised contact;
onlyWithContactfilter; official INEGI REST API, built-in token.
Part of the foXLabs data platform — official public-data company, contact, ownership, jobs, charity, location & AI-search intelligence scrapers. Browse the full suite at data.foxlabs.com.tr.
