Mexico Company Data — DENUE Business Directory (5M+) avatar

Mexico Company Data — DENUE Business Directory (5M+)

Pricing

from $4.00 / 1,000 results

Go to Apify Store
Mexico Company Data — DENUE Business Directory (5M+)

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

Berkan Kaplan

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

5

Monthly active users

5 days ago

Last modified

Share

Mexico Company Data Scraper — DENUE Directory (INEGI)

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:

FieldTypeDescription
namestringEstablishment / business name
legalNamestringRazón social (legal entity name), where reported
id / cleestringINEGI establishment id + CLEE unique-establishment key
activitystringEconomic activity — SCIAN class (e.g. Restaurantes con servicio de preparación de alimentos)
sizeBandstringEmployee size stratum (e.g. 11 a 30 personas)
establishmentTypestringFixed / semi-fixed / mobile (Fijo / Semifijo / Móvil)
street / exteriorNumber / interiorNumberstringStreet address parts
neighborhood / postalCodestringColonia + CP (postal code)
municipality / statestringMunicipality + state
fullAddressstringReady-to-use single-line address
latitude / longitudenumberExact geo-coordinates
phone / email / websitestringSelf-reported contact (conservatively normalised; malformed values dropped)
hasContact / contactMethods[]bool / arrayContact presence + which channels are populated
source / sourceUrl / licensestringProvenance: INEGI, the establishment's DENUE detail page, licence string
scrapedAtstringISO 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 location radius 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 scianCode sector 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/longitude on 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 ApifyClient
client = 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 groupFill 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.
  • 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; onlyWithContact filter; 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.