Meta Special Ad Categories: targeting restrictions, API rules, and how to update existing ad sets
Short answer: Selecting Housing, Employment, or Financial Products and Services (which replaced Credit) locks ad set targeting to ages 18 to 65+, all genders, no postal or ZIP codes, no location exclusions, no standard Lookalike audiences, and at least a 15-mile or 25-km pin radius. Social Issues, Elections, or Politics uses authorization and disclaimers instead of those demographic locks.
The four Special Ad Categories in Meta Ads
Meta requires you to declare a Special Ad Category at the campaign level whenever your ads promote regulated topics:
- Housing: Real estate sales and rentals, mortgages, home equity loans, homeowners insurance, appraisals, and related housing services.
- Employment: Job listings, internships, professional certification programs, job boards, and employment fairs.
- Financial Products and Services: Credit cards, loans, bank accounts, insurance, investment offers, and payment services. This category replaced the older
CREDITvalue. In live Graph API v25 validation checks on October 28 and October 29, 2026 (on a test ad account), sendingCREDITon campaign creation or update was refused with error2909060("no longer available. Choose Financial products and services instead"). - Social Issues, Elections or Politics: Ads covering political candidates, elections, legislation, or debated public social issues. Rather than applying Housing/Employment/Financial audience locks, this category enforces advertiser authorization, a "Paid for by" disclaimer, and Ad Library transparency (plus regional freeze windows, such as US election restrictions seen in error
2708092during late-October 2026 validation probes).
Failing to declare the matching category when running ads in these verticals risks ad disapproval or account restrictions.
Exact targeting restrictions: standard vs. Special Ad Category
The table below combines Meta's published Business Help Center rules with live Marketing API measurements taken on paused test objects (Graph API v25) on October 28, 2026:
| Targeting control | Standard campaign | Housing, Employment, or Financial Products and Services |
|---|---|---|
| Age | Custom range (18 to 65+) | Locked to 18 to 65+. Setting age_max: 64 or narrow ranges is refused (100/2909037). |
| Gender | All, Men, or Women | Locked to All genders. Sending [1] or [2] is refused (100/2909040). |
| Countries | Any supported country | Must match the campaign's special_ad_category_country list (#2909034 if outside it). |
| ZIP / postal codes | Supported in eligible countries | Unavailable (refused with #2909042). |
| City / pin radius | Down to 1 mile / 1 km depending on area | Minimum 15 miles / 25 km (#2909039 below threshold; 25 miles accepted in live v25 tests). |
| Location exclusions | Supported | Unavailable (refused with #2909046, tested in both UA and US). |
| Detailed targeting exclusions | Discontinued for ad sets | Discontinued for ad sets (Meta refuses these regardless of category). |
| Lookalike audiences | Standard Lookalikes available | Standard Lookalikes unavailable (Special Ad Audiences used instead where supported). |
Detailed targeting inclusions, languages, devices, advantage_audience |
Supported | Accepted in v25 API tests (including narrowing via AND), though Meta restricts sensitive or protected-trait interests. |
Two findings from the October 28, 2026 measurements stand out for teams working across countries and interfaces:
- The Marketing API enforces age and gender locks in every tested country. Across 14 category-and-country pairs (
FINANCIAL_PRODUCTS_SERVICESacross UA, PL, DE, GB, CA, AU, US;EMPLOYMENTacross UA, GB, CA, US;HOUSINGacross UA, CA, US), every single pair refused ages 25 to 34 and single-gender targeting with#2909037and#2909040, even when Ads Manager's web interface appeared less restrictive in certain non-US flows. - Omitting
special_ad_category_countrydefaults silently to['US']. When a campaign category was written through the API without specifying countries, Meta stored['US'], causing any ad set targeting UA or PL to fail with#2909034.
Updating existing ad sets and how tune_for_category works
If you add a Special Ad Category to a campaign after its ad sets already exist, Ads Manager's web UI and Meta's Marketing API behave differently:
- In Ads Manager UI: Turning on a Special Ad Category at the campaign level resets and locks the age and gender controls in the UI flow.
- In the Marketing API: Adding a category to an existing campaign succeeds (
success) and does not automatically rewrite existing ad sets. Measured on a test ad account (Graph API v25, October 28, 2026): an ad set targeting ages 25 to 34 and men kept its narrow targeting and within 30 seconds received aHARD_ERROR(2490031InvalidOperation on the campaign, or2909035/2909069on ad sets).
To bring existing ad sets into compliance via the API, Meta provides the tune_for_category parameter on POST /{adset_id} (HOUSING, EMPLOYMENT, or FINANCIAL_PRODUCTS_SERVICES). Measured across five deliberately non-compliant paused ad sets on October 28, 2026 (Graph API v25, test ad account), tune_for_category rewrote every restricted field automatically:
- Ages
30-40changed to18-65(including Advantage+ audienceage_min: 25reset to18). - Gender
[2]was removed (reset to all genders). - A 10-mile city radius expanded to 15 miles, and a 5-km pin expanded to 25 km.
- A ZIP code (
US:10001) was replaced by the whole country (US). - Excluded locations were removed, while interest inclusions and
advantage_audiencestayed intact. tune_for_categoryoverrode narrow targeting sent in the same POST and folded cleanly into ordinarynameanddaily_budgetupdates. However, it did not fix country mismatches (#2909034).
Two ordering rules matter if you update existing campaigns:
- Fix or tune the ad sets first, then add the Special Ad Category to the campaign. Measured on October 28, 2026 (Graph API v25): tuning ad sets first and adding the category afterwards cleared validation cleanly across 5 of 5 campaigns within 25 seconds. Applying the category to the campaign first left a stale
WITH_ISSUES/2490031flag on the campaign for over 265 seconds after the ad set was fixed, until another write touched the campaign itself. - Removing a Special Ad Category later does not restore previous narrow targeting. Once age is reset to 18 to 65+ and gender to all, those values stay broad until you edit them back manually.
How to check and update existing ad sets across accounts
When you manage campaigns across many ad accounts, checking Special Ad Category compliance means verifying both the campaign category with its target countries and every child ad set's age, gender, radius, and exclusions.
In Multitool ADS, all connected ad accounts and Meta profiles appear in one table, and non-delivering or flagged campaigns and ad sets show the exact reason Meta states. You can filter affected objects across accounts and bulk-edit targeting or Special Ad Category settings (or apply them through the Multitool Ads MCP connector in Claude after previewing and approving the change), with each object reporting whether the update succeeded or why Meta refused it.
You can see multi-account filtering and bulk targeting edits in action on sample campaigns in the Multitool ADS live demo, no account needed.
Sources: Special Ad Category (Meta Marketing API), Marketing API Campaign Reference, Marketing API Ad Set Reference, Meta Business Help Center.