# Mexico Industrial Business Search (`neurolab_works/mexico-industrial-business-search`) Actor

Find filtered Mexican businesses using official INEGI/DENUE data with SCIAN-based industry targeting, deduplication, normalized fields, public contact data when available, and freshness metadata.

- **URL**: https://apify.com/neurolab\_works/mexico-industrial-business-search.md
- **Developed by:** [Neuro Lab](https://apify.com/neurolab_works) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$15.00 / 1,000 business results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## Mexico Industrial Business Search

**Disclaimer:** This is an independent, unofficial tool and is not affiliated with, sponsored by, or endorsed by INEGI. Data is obtained from the official DENUE source.

**What it does:** Queries INEGI's official DENUE business registry live, filters results to real matches for an industrial vertical (industrial safety/PPE or industrial packaging) in a specific Mexican state, deduplicates branches into one record per company, and returns a normalized, scored result set.

**Who it's for:** Sales and market-research teams selling into Mexico's industrial sector -- EPP/safety equipment distributors, industrial packaging suppliers, or anyone doing B2B lead qualification in these two verticals.

**Data source:** INEGI's DENUE (Directorio Estadístico Nacional de Unidades Económicas) -- Mexico's official government business registry, queried live on every run (no cached/sample data is ever served).

**What makes it useful:**

- Filtered by real industry-activity text, not a raw keyword dump -- retail, restaurants, and other non-industrial matches are excluded before you see them.
- Deduplicated: multiple branches of the same company are merged into one result with an establishment count, not returned as separate records.
- Each result includes a `commercial_fit` rating and the specific reason it matched.
- Public contact info (email/phone/website) included when it's in the official registry.

**Important -- what `commercial_fit` means:** `commercial_fit` is a **deterministic relevance classification** computed by matching the business's registered DENUE activity text against the requested vertical's keyword rules (see `fit_reasons` on each record for the exact match). It is **not confirmed buying intent** and does not imply the business is looking to purchase anything -- it only measures how closely the business's registered activity matches your target industry vertical.

### Input example

```json
{
  "vertical": "epp_seguridad_industrial",
  "state": "Jalisco",
  "limit": 10,
  "deduplicate": true
}
```

### Output example

```json
{
  "business_name": "PROCESADORA METALICA",
  "activity": "Fabricacion de productos metalicos",
  "state": "Jalisco",
  "municipality": "Guadalajara",
  "commercial_fit": "HIGH",
  "fit_reasons": ["core activity match: fabricacion"],
  "commercial_signals": ["INDUSTRIAL_ACTIVITY_MATCH"],
  "establishments_detected": 1,
  "email": null,
  "website": null,
  "phone": null,
  "source": "INEGI/DENUE",
  "freshness": "Live INEGI/DENUE query, no cache on Apify (each run fetches fresh data)."
}
```

### Pricing

Pay-per-event: **$0.015 USD per `business_result`** delivered. You are only charged for deduplicated, filtered records actually returned to your dataset -- never for the run itself, and never for a failed or empty run.

### Data freshness

Every run queries the live DENUE API directly -- there is no caching layer on Apify's side, so results reflect DENUE's current registry at the moment you run the Actor.

### Limitations

- Covers two industrial verticals only (industrial safety/PPE, industrial packaging) -- not a general business directory.
- Requires a specific Mexican state as input; a single national (all-states) search is not supported due to a confirmed bug in DENUE's own live API with that parameter.
- Public contact fields (email/website/phone) are only as complete as INEGI's own registry -- many businesses have none on file.
- `commercial_fit` reflects registered activity text matching only, not verified purchase intent or current operational status.

### Contact/support

Built and maintained by NeuroLab Works. For issues or questions, use the Actor's Issues tab on Apify Console.

# Actor input Schema

## `vertical` (type: `string`):

Which industry vertical to search. Only the two already-validated verticals are supported in this version.

## `state` (type: `string`):

State name, e.g. 'Nuevo Leon', 'Jalisco', 'Ciudad de Mexico'. National search (all states at once) is not supported -- DENUE's own API has a confirmed bug with that parameter.

## `limit` (type: `integer`):

Maximum number of deduplicated company records to return (and be charged for).

## `deduplicate` (type: `boolean`):

When true, multiple branch locations of the same company are merged into one result with an establishment count instead of returned as separate records.

## Actor input object example

```json
{
  "vertical": "epp_seguridad_industrial",
  "state": "Jalisco",
  "limit": 10,
  "deduplicate": true
}
```

# Actor output Schema

## `businessResults` (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 = {
    "vertical": "epp_seguridad_industrial",
    "state": "Jalisco"
};

// Run the Actor and wait for it to finish
const run = await client.actor("neurolab_works/mexico-industrial-business-search").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 = {
    "vertical": "epp_seguridad_industrial",
    "state": "Jalisco",
}

# Run the Actor and wait for it to finish
run = client.actor("neurolab_works/mexico-industrial-business-search").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 '{
  "vertical": "epp_seguridad_industrial",
  "state": "Jalisco"
}' |
apify call neurolab_works/mexico-industrial-business-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,neurolab_works/mexico-industrial-business-search"
        }
    }
}

```

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/gcZTPt8mXAe4kGfjK/builds/IJG8AiPxLeQXl2uJr/openapi.json
