# Mexico Company Complaints API - PROFECO Buró Comercial (`timekast/mexico-consumer-complaints-profeco`) Actor

Official consumer complaints per company in Mexico from PROFECO Buró Comercial: totals, yearly conciliation rate and top reasons for 57k+ firms.

- **URL**: https://apify.com/timekast/mexico-consumer-complaints-profeco.md
- **Developed by:** [TimeKast](https://apify.com/timekast) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 company complaint profiles

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?

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

## Mexico Company Complaints API - PROFECO Buró Comercial

**The official consumer-complaint record of any company in Mexico**, from PROFECO's *Buró Comercial* (Mexico's federal consumer protection agency): total complaints, complaints received per year, conciliated vs. not conciliated, **conciliation rate** and the **top complaint reasons**. 57,000+ companies, data since 2019. No login, no browser - pay only per company profile delivered.

[🇲🇽 Versión en español abajo](#-español)

### What data do you get?

One row per company:

- **Legal name** (razón social), **trade name** and PROFECO **industries** (giros)
- **Total complaints** on record
- **Yearly statistics** (optional): received, concluded, conciliated, not conciliated, concluded for other reasons, in progress and **conciliation rate (%)**
- **Top complaint reasons** per year (optional), e.g. *refusal to honor warranty*, *billing errors*
- The search term that matched, source attribution and timestamp

### Use cases

- **KYB & vendor due diligence** - check a supplier, merchant or partner before onboarding.
- **Fintech, lenders & insurers** - add a public reputation signal to risk scoring.
- **Brands & competitive intelligence** - benchmark complaint volume and resolution rate vs. competitors (airlines, telecom, department stores, car dealers, real estate…).
- **Journalists & researchers** - national ranking of the most-complained-about companies, by industry.
- **Monitoring** - schedule a monthly run for your watch list and get alerted on changes.

### How to use it

1. Enter company names (legal or trade name): `Telcel`, `Liverpool`, `Coppel`, `Volaris`… - or leave the list empty to get the **national ranking** by number of complaints.
2. Optionally filter by industry (e.g. `AEROLÍNEA`, `TIENDA DEPARTAMENTAL`) and minimum complaints.
3. Choose whether to include yearly statistics and top reasons, and how many years.
4. Set **Max companies** and run.

#### Input example

```json
{
  "companies": ["Coppel", "Volaris"],
  "maxMatchesPerCompany": 2,
  "includeYearlyStats": true,
  "includeReasons": true,
  "yearsBack": 3,
  "maxItems": 100
}
```

| Field | Description |
|---|---|
| `companies` | Names to look up. Empty = national ranking by complaints. |
| `maxMatchesPerCompany` | Matches per name (branches/franchises are listed separately by PROFECO). Default 5. |
| `industry` | PROFECO industry (giro) text, e.g. `AEROLÍNEA`, `TIENDAS DE AUTOSERVICIO`. |
| `minComplaints` | Skip companies with fewer complaints. |
| `includeYearlyStats` / `includeReasons` | Yearly national stats and top reasons. Default on. |
| `yearsBack` / `years` | Most recent N years (default 3) or exact years such as `["2024","2025"]`. |
| `maxItems` | Cap on companies (you pay only for what is delivered). Default 100. |

#### Output sample

```json
{
  "providerId": "050dba5b71caf0720a9bc2eb666cd466",
  "legalName": "COPPEL, SA DE CV",
  "tradeName": "COPPEL",
  "totalComplaints": 12641,
  "industries": ["TIENDA DEPARTAMENTAL"],
  "searchTerm": "Coppel",
  "yearsAvailable": [2026, 2025, 2024, 2023, 2022, 2021, 2020, 2019],
  "yearly": [{
    "year": 2026, "received": 1342, "concluded": 1342, "conciliated": 381, "notConciliated": 344,
    "concludedOtherReasons": 617, "inProgress": 0, "conciliationRate": 52.6,
    "topReasons": ["Negativa a corregir errores de cobro", "Negativa a la entrega del producto o servicio"]
  }],
  "source": "PROFECO Buró Comercial",
  "sourceUrl": "https://burocomercial.profeco.gob.mx/",
  "scrapedAt": "2026-10-19T13:57:32.677Z"
}
```

`conciliationRate` = conciliated / (conciliated + not conciliated), in %.

### How much does it cost?

Pay per event - you pay only for company profiles delivered (plus Apify's tiny standard start fee of US$0.00005 per run).

| Event | Price |
|---|---|
| Company complaint profile (one company row) | US$0.005 → **US$5.00 per 1,000 companies** |

Each profile combines several PROFECO lookups (totals, yearly statistics and reasons). Real runs (Oct 2026): Coppel + Volaris with 2 years of stats = 4 profiles ≈ **US$0.02** in 13 s; the airline industry ranking = 160 companies ≈ **US$0.80**.
Use **Max companies** or **Max cost per run** to cap spending; the Actor stops cleanly at your budget.

### Data quality

- If PROFECO is down or changes its format, the run **fails with a clear message**; a search that simply matches nothing is verified with a canary query and reported as such.
- Polite to the source (about 1-2 requests per second, retries with backoff).
- `RUN_STATS` and `QUALITY_REPORT` are saved in the run's key-value store.

### FAQ

**Why does a company appear several times?** PROFECO lists some branches, franchises or legal entities separately. Increase `maxMatchesPerCompany` to see them all.

**Why is a company missing?** PROFECO only lists suppliers with at least one complaint. Try the legal name or a shorter trade name.

**Are the statistics national?** Yes - yearly figures are PROFECO's national totals for that supplier.

**Is this legal?** The Actor reads the **public** Buró Comercial site that PROFECO publishes so consumers can compare companies, without login. It targets businesses; it does not collect individual complainants' data. Not affiliated with PROFECO.

**Can I call it from code or an AI agent?** Yes - via the Apify API, JavaScript/Python clients, Make/Zapier/n8n or the Apify MCP server.

**Found a problem?** Open an issue in the Issues tab; we usually reply within 2 business days.

***

### 🇲🇽 Español

## API de quejas por empresa en México - Buró Comercial de PROFECO

**El historial oficial de quejas de cualquier empresa en México**, del *Buró Comercial* de PROFECO: total de quejas, quejas recibidas por año, conciliadas y no conciliadas, **tasa de conciliación** y **principales motivos de queja**. Más de 57,000 empresas, datos desde 2019. Sin login: pagas solo por perfil de empresa entregado.

#### ¿Qué datos obtienes?

Una fila por empresa: razón social, nombre comercial, giros, total de quejas y, opcionalmente, estadísticas por año (recibidas, concluidas, conciliadas, no conciliadas, en trámite, % de conciliación) y principales motivos.

#### Casos de uso

- KYB y due diligence de proveedores, comercios y socios.
- Fintech, crédito y seguros: señal pública de reputación para scoring de riesgo.
- Marcas: comparar volumen de quejas y tasa de conciliación con la competencia.
- Periodistas e investigadores: ranking nacional de empresas con más quejas, por giro.

#### Cómo usarlo

```json
{ "companies": ["Coppel", "Volaris"], "maxMatchesPerCompany": 2, "includeYearlyStats": true, "includeReasons": true, "yearsBack": 3, "maxItems": 100 }
```

Deja `companies` vacío para el **ranking nacional**, filtrable por giro (`industry`, p. ej. `AEROLÍNEA`).

#### Campos de salida

`providerId`, `legalName`, `tradeName`, `totalComplaints`, `industries`, `searchTerm`, `yearsAvailable`, `yearly` (`year`, `received`, `concluded`, `conciliated`, `notConciliated`, `concludedOtherReasons`, `inProgress`, `conciliationRate`, `topReasons`), `source`, `sourceUrl`, `scrapedAt`.

#### Precio

Pago por evento: **US$0.005 por perfil de empresa (US$5.00 por 1,000)** más la tarifa estándar de inicio de Apify (US$0.00005). Ejemplo real: Coppel + Volaris con 2 años = 4 perfiles ≈ US$0.02. Usa "Max companies" o "Max cost per run" para limitar el gasto.

#### Preguntas frecuentes

**¿Por qué una empresa aparece varias veces?** PROFECO lista sucursales o razones sociales por separado; sube `maxMatchesPerCompany`.
**¿Por qué no aparece una empresa?** PROFECO solo lista proveedores con al menos una queja; prueba con la razón social.
**¿Es legal?** Lee el sitio **público** del Buró Comercial, sin login, enfocado en empresas; no recopila datos de consumidores. Sin afiliación con PROFECO.

# Changelog

This Actor's version history is a separate document: https://apify.com/timekast/mexico-consumer-complaints-profeco/changelog.md

# Actor input Schema

## `companies` (type: `array`):

Company names (legal or trade name), e.g. Telcel, Liverpool, Coppel, Elektra, Volaris. Each name returns its best matches, most complaints first. Leave empty to get the national ranking of companies by number of complaints.

## `maxMatchesPerCompany` (type: `integer`):

How many matching companies to return for each name (PROFECO lists branches and franchises separately).

## `industry` (type: `string`):

Optional. PROFECO industry (giro) text in Spanish; matches companies whose industry list contains it, e.g. "AEROLÍNEA", "TIENDA DEPARTAMENTAL", "TIENDAS DE AUTOSERVICIO". Pick a suggestion or type your own.

## `minComplaints` (type: `integer`):

Skip companies with fewer complaints than this.

## `includeYearlyStats` (type: `boolean`):

Adds, per year: complaints received, concluded, conciliated, not conciliated, in progress and conciliation rate (national level).

## `includeReasons` (type: `boolean`):

Adds the top complaint reasons PROFECO reports for each year (e.g. refusal to honor warranty).

## `yearsBack` (type: `integer`):

How many of the most recent years to include (0 = all years since 2019). Ignored when "Specific years" is set.

## `years` (type: `array`):

Exact years to include, e.g. 2024, 2025.

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

Stop after this many companies (0 = no limit). You pay only for companies delivered.

## `proxyConfiguration` (type: `object`):

Not needed normally (the source is public and reachable from Apify). Only if the source blocks the run region, enable Apify Proxy (RESIDENTIAL, country MX).

## Actor input object example

```json
{
  "companies": [
    "Telcel",
    "Liverpool",
    "Coppel"
  ],
  "maxMatchesPerCompany": 2,
  "minComplaints": 0,
  "includeYearlyStats": true,
  "includeReasons": true,
  "yearsBack": 3,
  "years": [
    "2024",
    "2025"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All result rows in the default dataset (overview view).

## `runStats` (type: `string`):

Requests, errors and charged events for this run.

## `qualityReport` (type: `string`):

Schema validation and data-quality summary of this run.

# 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 = {
    "companies": [
        "Coppel",
        "Volaris"
    ],
    "maxMatchesPerCompany": 2,
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("timekast/mexico-consumer-complaints-profeco").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 = {
    "companies": [
        "Coppel",
        "Volaris",
    ],
    "maxMatchesPerCompany": 2,
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("timekast/mexico-consumer-complaints-profeco").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 '{
  "companies": [
    "Coppel",
    "Volaris"
  ],
  "maxMatchesPerCompany": 2,
  "maxItems": 10
}' |
apify call timekast/mexico-consumer-complaints-profeco --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,timekast/mexico-consumer-complaints-profeco"
        }
    }
}
```

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/lL6sGdNIQ8iGJnoWe/builds/RV9LPB7bC3rFwxFp5/openapi.json
