EU compliance — DSA fields and special ad categories

Last updated: May 19, 2026

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

Target geo

DSA required?

Non-EU (e.g. US only)

No

EU country (e.g. IT, DE, FR, ES, NL, ...)

Yes

Mixed (US + EU)

Yes (for EU portion; Meta enforces)

Worldwide

Yes (covers EU implicitly)

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:

Category

When to declare

CREDIT

Credit cards, loans, mortgages, BNPL services

EMPLOYMENT

Job postings, recruitment ads, career opportunities

HOUSING

Real estate, rentals, mortgages for purchase

SOCIAL_ISSUES_ELECTIONS_OR_POLITICS

Political campaigns, election ads, social issue advocacy

Restrictions when special category set

Restriction

Detail

No narrow audience targeting

Cannot narrow by age (must be 18-65+), gender, ZIP code (housing)

Limited interest targeting

Cannot use interests that could discriminate (e.g. parental status, religion, ethnicity)

No lookalikes from minority-affected sources

Sources excluded by Meta's policy

Authorized advertiser status required (politics only)

Separate verification process with Meta — see Meta Business Help

Disclaimer ("Paid for by...") required (politics)

Wevion supports the field

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/launch-validation.service.ts:

  • EU geo + missing dsa_beneficiaryDSA_BENEFICIARY_REQUIRED error

  • EU geo + missing dsa_payorDSA_PAYOR_REQUIRED error

  • Special category + age narrowingSPECIAL_AD_CATEGORY_VIOLATION error

  • Politics + no authorized advertiserPOLITICAL_NOT_AUTHORIZED error

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_payor fields 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 the dsa_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.

Related