Background checks for Human Resources
Singula matches the candidate against RENAPO, the SAT and the INE's Lista Nominal. Court records, sanctions lists and digital footprint are added to the same file, with a log of every query.
The candidate file is matched field by field against the official source
CURP validation compares six fields against RENAPO. The Lista Nominal returns the credential status and its removal cause. Judicial bulletins come back with court, state and parties. Every query keeps its receipt and its date.
The court search returns files published in judicial bulletins; it is not a criminal-record certificate and does not replace one.
Where it fits in your operation
The products behind this solution
CURP and RFC
RENAPO returns the CURP record; the SAT, the RFC standing. Six candidate fields are matched one by one.
INE — Lista Nominal
Front and back OCR, plus a verdict: active, deregistered, duplicate or stolen.
Court records
Docket, court, state and whether the person appears as plaintiff or defendant.
Sanctions and PEP
Nine categories per search, all from public sources, with homonym disambiguation by country.
Identity verification
24-hour link: document, selfie, liveness proof and a face match against the document photo.
Digital footprint
Open sources: news, public profiles and the career history they claim.
How it works
The candidate file is built in four steps, on the same account.
Capture consent
The privacy notice and the candidate's acceptance are collected on your side. Singula keeps the log: what was queried, on whom and when.
receipt and date per query
Read the ID card
Front and back of the INE. We OCR the fields and query the Lista Nominal, the registry of active credentials.
active · deregistered · duplicate or stolen
Cross-check RENAPO and SAT
The CURP comes back with a field-by-field match: given names, surnames, date of birth and sex. The RFC comes back with the SAT's literal wording.
six fields matched
Close the file
Sanctions, PEP and court records. The risk engine folds every signal into a 0-100 score and flags the queries that have not run.
one score per file
What the LFPDPPP and the labour law require before screening.
Candidate screening in Mexico is governed by two laws. The LFPDPPP requires a privacy notice and consent before personal data is processed. The Federal Labour Law forbids using the result to discriminate.
Reference material, not legal advice. Personal-data processing by private parties is governed by the Ley Federal de Protección de Datos Personales en Posesión de los Particulares published in the DOF on 20 March 2025, which repealed the 2010 law; the cited articles belong to the Federal Labour Law. The party answerable to the authority is the employer; have your privacy notice and consent form reviewed by your own legal team.
- 01
Consent before the first query
The privacy notice states which sources are queried and for what purpose. Biometric data counts as sensitive personal data; the LFPDPPP requires express written consent to process it.
- 02
Non-discrimination in hiring
Article 133 of the LFT forbids denying employment on grounds of ethnic or national origin, gender, age, disability, social condition, health, religion, opinions, sexual preference or marital status. The verification result feeds a documented decision by the employer.
- 03
We do not return criminal records
We query court records published in judicial bulletins: docket number, court, state, category and the role the person plays in the case. Criminal-record certificates are issued by the state authority.
- 04
CURP and RFC belong in the contract
Article 25 of the Federal Labour Law requires the worker's CURP and RFC in the individual employment contract. Validation against RENAPO and the SAT confirms both records before signing.
One file per candidate, several sources.
The candidate is created once and every query runs on that file. Synchronous tools answer in the same call; asynchronous ones notify through a signed webhook when they finish.
# 1 · Create the candidate file
curl -X POST https://api.singula.mx/customer \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"type": "physical",
"name": "MARIA FERNANDA",
"last_name": "GARCIA",
"mothers_last_name": "HERNANDEZ",
"gender": "M",
"birth_day": "15",
"birth_month": "03",
"birth_year": "1990",
"birth_place": "DF",
"env": "production"
}'
→ { "id": "cus_lzk9m4ab3f" }
# 2 · CURP against RENAPO — synchronous, field by field
curl https://api.singula.mx/app/curp/customer/cus_lzk9m4ab3f/validate \
-H "Authorization: Bearer sk_live_..."
→ {
"data": {
"persona": {
"curp": "GAHM900315MDFRRR05",
"nombres": "MARIA FERNANDA",
"primerApellido": "GARCIA",
"segundoApellido": "HERNANDEZ",
"fechaNacimiento": "15/03/1990",
"statusCurp": "RCN"
},
"match": {
"confidence": "high",
"passed": true,
"fields": {
"name": { "match": true },
"last_name": { "match": true },
"mothers_last_name": { "match": true },
"date_of_birth": { "match": true },
"gender": { "match": true }
}
}
},
"request_id": "6821f0c4a9e13b0042d7c918"
}
# 3 · INE: OCR + Lista Nominal — asynchronous
curl -X POST https://api.singula.mx/app/ine-extraction/customer/cus_lzk9m4ab3f \
-H "Authorization: Bearer sk_live_..." \
-F "ine_front=@ine_frente.jpg" \
-F "ine_back=@ine_reverso.jpg"
→ { "request_id": "6821f0c4a9e13b0042d7c919", "status": "processing" }
// Webhook once the OCR → Lista Nominal chain closes:
{ "event": "ine_extraction.completed", "request_id": "6821f0c4a9e13b0042d7c919" }
// And the full record:
curl https://api.singula.mx/app/ine-extraction/status/6821f0c4a9e13b0042d7c919 \
-H "Authorization: Bearer sk_live_..."
→ {
"status": "completed",
"response": {
"extract": {
"ine_model": "E",
"extracted_data": {
"clave_de_elector": "GRHRMR00000000M000",
"seccion": "1247",
"vigencia": "2031"
}
},
"listanominal": {
"outcome": "vigente",
"baja_reason": null,
"model_used": "E",
"queried_at": "2026-04-30T14:22:08Z"
}
}
}Frequently asked questions
Yes. Screening a candidate is personal-data processing: the LFPDPPP requires a privacy notice and consent, express consent when biometrics are involved. Consent is collected on your side; Singula records what was queried, when and with what result.
No. The search queries court records published in judicial bulletins: docket number, court, state, category and whether the person appears as plaintiff or defendant. Coverage is whatever each court publishes. Criminal-record certificates are issued by the state authority.
The sanctions search returns how many homonyms it found and in which countries. Court records flag repeated names with their count. Date and country of birth sharpen the disambiguation when they are included in the query.
Yes. Each tool runs separately on the same file. Identity checks run without the rest; sanctions, court records and identity verification are added when requested. The file records what ran and what did not.
The response indicates the record does not exist in the source queried: RENAPO for the CURP, the SAT for the RFC. The result is stored in the file with its receipt and its date. If the provider does not respond, the query is logged as an error.
Yes. The customer is created as a legal entity with its registered name. Company RFC validation, corporate court records and the sanctions search become available. The file and the log are the same as for individuals.
Other solutions
Build your first candidate file today
Create your account and start in the test environment, with sample data in the same structure as production. Sanctions, court records and identity verification open once your company verification is complete.