In countries with financial services advertising regulations, Meta may require advertisers to verify their identity and financial license. Regulators will provide Meta with a dataset of financial licenses, which Meta uses to validate licenses submitted by advertisers. This document covers how regulators securely share license data with Meta and the technical specifications for integration.
The integration works as follows:
config.json
(metadata) and a CSV file(license data) are uploaded to Meta's secure SFTP server. Instructions
for uploading files.The config.json
file is a manifest containing metadata required for processing. It must be included with every upload.
version
string
Yes
Schema version used for the license CSV file.
"v1"
load_type
string
Yes
Whether this is a fulldataset or an incrementalupdate (deltas only).
"full", "incremental"
mode
string
Yes
"validation", "ingestion"
support_email_addresses
array of string
Yes
Monitored email addresses that Meta can use for outreach around data ingestion.
{
"version": "v1",
"load_type": "full",
"mode": "ingestion",
"support_email_addresses": [
"support@domain.com",
"support2@domain.com"
]
}
License data is provided as a CSV file. The file can have any name. There are two load types:
Credential_Id
.| Column | Required | Type | Description | Format / Allowed Values | Example |
|---|---|---|---|---|---|
| Credential_Id |
Yes |
string |
Unique identifier for the license. Displayed on published financial services ads. |
Max 200 characters |
123456789 |
| License_Status |
Yes |
string |
Status of the license. |
ACTIVE, INACTIVE, LEGALLY_EXEMPT |
ACTIVE |
| Licensee_Name |
Yes |
string |
Name under which the license is registered. |
Max 200 characters |
Jane Doe |
| Licensee_Type |
Yes |
string |
Type of entity holding the license. |
INDIVIDUAL, FIRM, UNKNOWN* |
INDIVIDUAL |
| License_Expiration_Date |
No |
number |
Expiration date of the license. |
Unix timestamp |
946684800 |
| Address_Line_1 |
No |
string |
Primary street address. |
Max 200 characters |
123 Main St |
| Address_Line_2 |
No |
string |
Secondary street address. |
Max 200 characters |
Suite 100 |
| City |
No |
string |
City, locality, town, or municipality. |
Max 200 characters |
San Francisco |
| State |
No |
string |
State, province, prefecture, county, or region. |
Max 200 characters |
CA |
| Country_Code |
No |
string |
Licensee's country. |
ISO 3166-1 alpha-2 (max 2 chars) |
US |
| Postal_Code |
No |
string |
Postal code. |
Max 12 chars |
94016 |
| Phone_Numbers |
At least one must be provided: Phone_Numbers, Email_Addresses, or Website_URLs. |
string |
Phone numbers registered on the license. |
Semicolon-delimited; E.164 format; max 16 chars each (includes + prefix) |
+15551234567;+15559876543 |
| Email_Addresses |
At least one must be provided: Phone_Numbers, Email_Addresses, or Website_URLs. |
string |
Email addresses registered on the license. |
Semicolon-delimited; max 254 chars each |
jane.doe@gmail.com;info@firm.com |
| Website_URLs |
At least one must be provided: Phone_Numbers, Email_Addresses, or Website_URLs. |
string |
Websites registered on the license. Must be prepended with “http://” or “https://”. |
Semicolon-delimited; max 2000 chars each |
https://www.example.com;https://www.example2.com |
To prevent impersonation, fraud, and abuse on Meta's advertising platforms, a connection check is essential. The uploaded financial license data must provide at least one of the following for each license: phone numbers, email addresses, or website URLs to perform this check. This ensures that the advertiser attempting to advertise is using a license connected to the entity in the verification.
The incremental schema uses the same columnsas the full load schema, plus one additional required column:
| Column | Required | Type | Description | Allowed Values |
|---|---|---|---|---|
| Operation |
Yes |
string |
The operation to perform on this row. |
UPSERT, DELETE |
Credential_Id
is required; all other fields are optional.An initial data set contains three licenses: A, B, C.
The following changes occur afterward:
The incremental CSV would contain:
| Credential_Id | Operation | ... |
|---|---|---|
| B |
UPSERT |
(other fields) |
| C |
DELETE |
|
| D |
UPSERT |
(other fields) |
License A is not includedbecause it had no changes.
The timestamp of your last ingested dataset is available via the ingestion_history/
folder on SFTP (see below).
config.json
and your CSV data file to your default directory.validation
mode in config.json
but data can only be ingested once daily.validation_history/
or ingestion_history/
directory, depending on the mode set in config.json
. If the uploaded CSV file contains any row-level errors, such as missing required values or invalid values, a separate CSV file detailing those errors will be generated. Before performing an ingestion, use validation
mode to confirm your files will be processed correctly.2026-03-11T12-23-56Z/
) containing the exact files used in the history directory.ingestion_history/
or validation_history/
), processing has not occurred yet.Below illustrates the file structure before and after a new ingestion on 3/11/26 involving data1.csv
and config.json
with mode ingestion
.
config.json
data1.csv
ingestion_history/
└── 2026-03-06T04-20-17Z/
├── config.json
├── license_data.csv
├── csv_errors.csv
validation_history/
└── 2026-03-11T05-18-14Z/
├── config.json
├── data1.csv
├── csv_errors.csv
└── 2026-03-06T01-15-24Z/
├── config.json
├── license_data.csv
├── csv_errors.csv
ingestion_history/
└── 2026-03-11T12-23-56Z/
├── config.json
├── data1.csv
└── 2026-03-06T04-20-17Z/
├── config.json
├── license_data.csv
├── csv_errors.csv
validation_history/
└── 2026-03-11T05-18-14Z/
├── config.json
├── data1.csv
├── csv_errors.csv
└── 2026-03-06T01-15-24Z/
├── config.json
├── license_data.csv
├── csv_errors.csv
To trigger another ingestion, upload new files to your default directory again.