# SAT 69-B Scraper (`scrapers_lat/sat-69b-scraper`) Actor

Extract Mexico SAT Lista 69-B (EFOS) blacklist of taxpayers presumed or confirmed to issue fake invoices. Scrape RFC, name, status (Presunto, Definitivo, Desvirtuado, Sentencia Favorable), oficio numbers and DOF publication dates, or screen any RFC for a clean or listed result.

- **URL**: https://apify.com/scrapers\_lat/sat-69b-scraper.md
- **Developed by:** [Michael Flores](https://apify.com/scrapers_lat) (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 $8.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## SAT 69-B Scraper

> Extract Mexico's SAT Lista 69-B (EFOS) blacklist of taxpayers presumed or confirmed to issue fake invoices, or screen any RFC against all 14,000+ listed taxpayers.

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify&logoColor=white)
![Mexico](https://img.shields.io/badge/Coverage-Mexico-blue)
![Maintained](https://img.shields.io/badge/Maintained-Yes-brightgreen)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)

<table><tr>
<td align="center"><strong>25 fields</strong><br>per record</td>
<td align="center"><strong>Mexico</strong><br>coverage</td>
<td align="center"><strong>JSON / CSV / Excel</strong><br>output formats</td>
<td align="center"><strong>Updated</strong><br>2026-06-20</td>
</tr></table>

<br>

### What you get

Each record is one taxpayer from the official SAT Lista 69-B (the Article 69-B CFF blacklist of EFOS, companies that issue simulated-operation invoices), with their current status and the full oficio and Diario Oficial publication history for every stage they passed through. Run it as a full dump or pass a list of RFCs to screen them one by one.

- **rfc**: the taxpayer's RFC tax ID
- **name**: registered name or razon social of the taxpayer
- **situacion**: current 69-B status (Presunto, Desvirtuado, Definitivo, Sentencia Favorable)
- **listed**: true when the RFC is on the list, false for a clean RFC you screened
- **listNumber**: the row number in the official list
- **presuncionOficio**: full presumption oficio reference and date
- **presuncionOficioNumber**: parsed presumption oficio number
- **satPublicationPresunto**: date the presumption was published on the SAT portal
- **presuncionOficioDof**: presumption oficio as published in the Diario Oficial
- **dofPublicationPresunto**: date the presumption appeared in the Diario Oficial
- **desvirtuadoOficio**: rebuttal oficio reference and date when the taxpayer cleared the presumption
- **desvirtuadoOficioNumber**: parsed rebuttal oficio number
- **satPublicationDesvirtuado**: date the rebuttal was published on the SAT portal
- **desvirtuadoOficioDof**: rebuttal oficio as published in the Diario Oficial
- **dofPublicationDesvirtuado**: date the rebuttal appeared in the Diario Oficial
- **definitivoOficio**: definitive (confirmed EFOS) oficio reference and date
- **definitivoOficioNumber**: parsed definitive oficio number
- **satPublicationDefinitivo**: date the definitive status was published on the SAT portal
- **definitivoOficioDof**: definitive oficio as published in the Diario Oficial
- **dofPublicationDefinitivo**: date the definitive status appeared in the Diario Oficial
- **sentenciaOficio**: favorable-ruling oficio reference and date
- **sentenciaOficioNumber**: parsed favorable-ruling oficio number
- **satPublicationSentencia**: date the favorable ruling was published on the SAT portal
- **sentenciaOficioDof**: favorable-ruling oficio as published in the Diario Oficial
- **dofPublicationSentencia**: date the favorable ruling appeared in the Diario Oficial
- **sourceUrl**: the official SAT CSV the record came from
- **observedAt**: when this record was last read by the scraper

### Who is it for

| Use case | Who benefits |
|---|---|
| Screen suppliers and customers against the EFOS blacklist before paying invoices | Accounting and tax teams |
| Automate AML and KYC checks on Mexican counterparties | Compliance and risk officers |
| Flag deductible-invoice risk before filing | Fiscal advisors and accountants |
| Enrich vendor master data with tax-status flags | Procurement and finance ops |
| Build datasets of confirmed fake-invoice issuers for analysis | Investigators and fintech teams |

### Frequently Asked Questions

**Does this cover the whole SAT 69-B list for Mexico?**
Yes. It reads the official complete SAT CSV (Listado Completo 69-B) directly, so a full dump returns every listed taxpayer, currently more than 14,000 records across all four status stages.

**How do I check if a specific RFC is blacklisted?**
Pass one or more RFCs in the input. Each listed RFC returns its full 69-B record, and each RFC that is not on the list returns a clean result with listed set to false, which is itself the screening answer you need.

**What do the status values mean?**
Presunto means SAT presumes the taxpayer issued fake invoices, Definitivo means it is confirmed, Desvirtuado means the taxpayer rebutted and cleared the presumption, and Sentencia Favorable means a court ruled in the taxpayer's favor.

**Can I get only the confirmed offenders?**
Yes. Use the status filter to return only Definitivo taxpayers, or any single stage, in full-dump mode. The filter is ignored when you screen specific RFCs.

**Why are some oficio or date fields empty?**
Each taxpayer only carries the stages it actually went through, so a Definitivo taxpayer that was never rebutted has empty desvirtuado fields. The scraper keeps those fields null rather than inventing values.

---

> This actor is an independent tool and has no affiliation with the SAT (Servicio de Administracion Tributaria). It only accesses data that is publicly available on the official SAT portal. Use it in accordance with the SAT's terms of service.

# Actor input Schema

## `rfcs` (type: `array`):

Optional. One or more taxpayer RFCs to look up. Each RFC returns its full 69-B record if it is on the blacklist, or a clean 'not listed' result if it is absent. Leave empty to dump the whole list.
## `maxItems` (type: `integer`):

Maximum number of records to collect. Optional.
## `situacion` (type: `string`):

Optional. Full-dump mode only: return only taxpayers in this 69-B stage. Ignored when RFCs are provided.
## `proxyConfiguration` (type: `object`):

Optional. The SAT CSV is normally reachable without a proxy. Enable only if you need to route requests through Apify Proxy.

## Actor input object example

```json
{
  "rfcs": [
    "AAA120730823",
    "XAXX010101000"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
````

# Actor output Schema

## `results` (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 = {
    "rfcs": [
        "AAA120730823",
        "XAXX010101000"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/sat-69b-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 = {
    "rfcs": [
        "AAA120730823",
        "XAXX010101000",
    ],
    "maxItems": 10,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/sat-69b-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "rfcs": [
    "AAA120730823",
    "XAXX010101000"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call scrapers_lat/sat-69b-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapers_lat/sat-69b-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SAT 69-B Scraper",
        "description": "Extract Mexico SAT Lista 69-B (EFOS) blacklist of taxpayers presumed or confirmed to issue fake invoices. Scrape RFC, name, status (Presunto, Definitivo, Desvirtuado, Sentencia Favorable), oficio numbers and DOF publication dates, or screen any RFC for a clean or listed result.",
        "version": "0.1",
        "x-build-id": "bu9qsK4rzdupg1pZj"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapers_lat~sat-69b-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapers_lat-sat-69b-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapers_lat~sat-69b-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapers_lat-sat-69b-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapers_lat~sat-69b-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapers_lat-sat-69b-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "rfcs": {
                        "title": "RFCs to check",
                        "type": "array",
                        "description": "Optional. One or more taxpayer RFCs to look up. Each RFC returns its full 69-B record if it is on the blacklist, or a clean 'not listed' result if it is absent. Leave empty to dump the whole list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Maximum number of records to collect. Optional."
                    },
                    "situacion": {
                        "title": "Taxpayer status filter",
                        "enum": [
                            "Presunto",
                            "Desvirtuado",
                            "Definitivo",
                            "Sentencia Favorable"
                        ],
                        "type": "string",
                        "description": "Optional. Full-dump mode only: return only taxpayers in this 69-B stage. Ignored when RFCs are provided."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional. The SAT CSV is normally reachable without a proxy. Enable only if you need to route requests through Apify Proxy."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
