EU compliance — DSA fields and special ad categories
DSA fields required for EU targeting. Special Ad Categories (CREDIT/EMPLOYMENT/HOUSING/SOCIAL_ISSUES) restrict targeting. Wevion validates pre-flight.
Written By Salvatore Sinigaglia
Last updated About 4 hours ago
DSA fields required for EU targeting. Special Ad Categories (CREDIT/EMPLOYMENT/HOUSING/SOCIAL_ISSUES) restrict targeting. Wevion validates pre-flight.
EU compliance — DSA fields and special ad categories
DSA (Digital Services Act) = EU regulation requiring transparency on EU-targeted ads. Two required fields per the DTO:
dsa_beneficiary(who benefits from the ad) +dsa_payor(who pays for it). Special Ad Categories (CREDIT, EMPLOYMENT, HOUSING, SOCIAL_ISSUES_ELECTIONS_OR_POLITICS) restrict targeting per US regulations. Wevion validates pre-flight; missing values block publish.
Who is this for
Anyone targeting EU geography. Anyone running ads in regulated categories (credit, jobs, housing, politics). Mandatory reading for EU mediabuyers.
DSA fields (EU regulation)
The Digital Services Act (EU regulation, fully enforced 2024+) requires advertisers to disclose:
- Who benefits from the ad (the advertiser's legal entity)
- Who pays for the ad (often same as beneficiary, sometimes different)
These fields surface in the ad's "Why am I seeing this ad?" transparency on the user side.
Wevion's DSA fields
Verified apps/backend/src/dto/request/bulk-launch.request.dto.ts:
dsa_beneficiary: Type.String({ description: 'DSA beneficiary' })dsa_payor: Type.String({ description: 'DSA payor' })Both required when targeting EU geo (any EU country in target_country or target_countries).
When required
EU country list includes 27 member states. Verify against Meta's official list.
What to enter
dsa_beneficiary: legal entity benefiting from the ad. Usually:
- Your company's legal name (e.g. "Acme Corp Ltd")
- For agencies: the client's legal entity (not the agency)
- For e-commerce: the legal entity selling the products
dsa_payor: legal entity paying for the ad spend. Usually:
- Same as beneficiary if the advertiser pays
- The agency if the agency pays Meta directly and bills the client back
- Verify with your finance / legal team
If you're unsure: ask the client + your finance team. Wrong values can lead to:
- Ad rejection by Meta
- Account suspension if pattern of wrong/fraudulent values
Special Ad Categories (US regulation)
If your ad falls in a special category (per US Fair Housing / Equal Credit Opportunity / Equal Employment regulations), you must declare it:
Verified apps/backend/src/types/campaigns/canonical.enums.ts SpecialAdCategory enum:
Restrictions when special category set
If you declare wrong:
- Ad rejected by Meta on review
- Account flagged for review (could lead to ad account suspension)
- Misleading declarations could result in regulatory action
Honesty is essential. When in doubt, declare.
How Wevion validates
Pre-flight validation runs via apps/backend/src/services/campaign-validation.service.ts:
- EU geo + missing DSA beneficiary/payor →
DSA_FIELDS_REQUIRED_FOR_EUerror - Special category + restricted targeting (e.g. age narrowing) →
SPECIAL_AD_CATEGORY_RESTRICTIONSerror - Special category required but not set →
SPECIAL_AD_CATEGORIES_REQUIREDerror
Errors block publish. Surface in Pro mode + Express mode + Bulk Launch row validation.
Setup in Campaign Creator
Express mode
- Audience step (3 of 6): country selector
- If EU country selected: DSA fields appear at bottom of step
- Special category dropdown also in this step (default: None)
Pro mode
- Campaign-level config: Special Ad Categories field
- Audience config (per adset): DSA fields appear if geo includes EU
Bulk Launch
- Per-row columns:
dsa_beneficiary,dsa_payor,special_ad_categories - Validation per row before publish
Template support
For repeatable launches with same legal entities:
- Save DSA fields in Campaign Template
- Future launches auto-fill (you can override per-campaign)
- Agency: per-client templates with client's DSA fields
Multi-platform DSA
Meta enforces DSA strictly. Other platforms:
- Google Ads: similar DSA fields, surface in Wevion as same fields
- TikTok: emerging support; check current TikTok policy
- Snapchat: limited EU presence; check current docs
- Taboola: native ad platform; similar requirements
Wevion handles per-platform variants but the DSA concept is the same.
What you'll see
In Pro mode audience config with EU country:
- Yellow warning: "EU geo selected — DSA fields required"
dsa_beneficiary+dsa_payorfields appear below countries- Validation badge: red until both filled
In Special Ad Category:
- Dropdown with options (None / CREDIT / EMPLOYMENT / HOUSING / SOCIAL_ISSUES_ELECTIONS_OR_POLITICS)
- If category selected: audience step shows restriction warnings (age locked to 18-65+, gender locked to All, etc.)
Examples
Example A: E-commerce shoes (EU target)
target_country: IT- Special category: None (shoes not regulated)
dsa_beneficiary: "Acme Shoes Ltd"dsa_payor: "Acme Shoes Ltd"- Targeting: standard (no restrictions)
Example B: Mortgage offer (US target)
target_country: US- Special category: CREDIT
dsa_beneficiary: N/A (not EU)- Targeting restrictions: age 18-65+, all genders, no narrow ZIP targeting
Example C: Job posting (multi-region)
target_countries: US + UK + DE- Special category: EMPLOYMENT
- DSA fields required (EU portion):
dsa_beneficiary= "Recruiter Corp Ltd",dsa_payor= "Recruiter Corp Ltd" - Targeting restrictions: age 18-65, no narrow geo
Example D: Political campaign (US)
target_country: US- Special category: SOCIAL_ISSUES_ELECTIONS_OR_POLITICS
- Requires authorized advertiser status on Meta (separate verification)
- Includes "Paid for by..." disclaimer field
- Targeting restrictions: heavy
Common mistakes
- EU geo + no DSA fields → publish blocked. Surfaced by pre-flight.
- Wrong DSA values (typos, mismatched entities) → ad may be approved but flagged later; account at risk.
- Hiding a regulated ad in "None" category → Meta detects + rejects + account flag.
- Lookalikes from a regulated category source → Meta blocks: "Cannot use this audience for special ad category".
Best practices
Pre-fill DSA in templates
Save your team's standard DSA values in templates. Reduces per-launch friction.
Verify with legal + finance
- DSA fields are legal disclosures — get sign-off from legal
- Especially for agency clients: agency vs client as payor matters
Document special category triggers
- Internal doc: when does a campaign qualify as CREDIT / EMPLOYMENT / HOUSING / POLITICS?
- Train team to declare correctly
- Better to over-declare than miss
Stay current with regulations
- DSA evolves; check Meta's policy updates
- Special categories update yearly
- Subscribe to Meta Business Help for changes
Common questions
- "What if my company is non-EU but targeting EU users?": still need DSA fields. Use your home-country legal entity.
- "Can I leave DSA blank for B2B-only campaigns?": No — DSA applies regardless of B2B/B2C if EU geo targeted.
- "What if agency pays Meta but charges client back?": agency is the
dsa_payor; client is thedsa_beneficiary. - "Does DSA apply to organic posts boosted as ads?": Yes — once boosted, same DSA requirements apply.
- "Can I edit DSA fields after publish?": usually no without re-launching. Configure correctly at publish.
FAQ
What are DSA fields and when are they required?
DSA (Digital Services Act) is an EU regulation requiring transparency on EU-targeted ads. Wevion requires two fields: dsa_beneficiary (who benefits from the ad) and dsa_payor (who pays for it). Both are required whenever you target any EU country, a mixed EU/non-EU set, or worldwide. Missing values block publish.
What are Special Ad Categories?
Special Ad Categories are declarations required under US regulations for ads in regulated areas: CREDIT (loans, credit cards, mortgages), EMPLOYMENT (job postings), HOUSING (real estate, rentals), and SOCIAL_ISSUES_ELECTIONS_OR_POLITICS. Declaring one restricts targeting — for example, no narrow age targeting, no ZIP code targeting for housing, and no discriminatory interest targeting.
What should I enter for dsa_beneficiary and dsa_payor?
Enter the legal entity benefiting from the ad as dsa_beneficiary — usually your company's legal name, or the client's entity for agencies. Enter the entity paying for the ad spend as dsa_payor, often the same as the beneficiary, or the agency if it pays Meta directly. Verify both with your finance and legal teams.
How does Wevion validate DSA and special category rules?
Wevion runs pre-flight validation before publish. Targeting an EU geo without the DSA beneficiary/payor fields raises a DSA_FIELDS_REQUIRED_FOR_EU error. A special category combined with restricted targeting (such as age narrowing) raises SPECIAL_AD_CATEGORY_RESTRICTIONS. These errors block publish across Express, Pro, and Bulk Launch.
Can I pre-fill DSA fields for repeatable launches?
Yes. Save your team's standard DSA values in a Campaign Template so future launches auto-fill them, and you can override per-campaign. Agencies can maintain per-client templates with each client's DSA fields. Because DSA fields are legal disclosures, get sign-off from your legal team.