← Back to BlogE-commerce

Why Meta Ads Lookalike Audiences Include Low-Income Users (And What to Do About It)

Meta's lookalike algorithm optimizes for engagement, not purchasing power. Learn how to layer demographic filters to fix this.

The Lookalike Problem Nobody Talks About

You have a great customer list. You upload it to Meta. You build a 1% lookalike audience. Your ads go live, and the results are... fine. Not terrible, but nowhere near the ROAS you expected from people who supposedly resemble your best customers.

Here is what is happening: Meta's lookalike algorithm matches users based on behavioral signals — pages they follow, content they engage with, apps they use, browsing patterns. Someone earning $30,000 a year can have nearly identical online behavior to someone earning $120,000 a year. They follow the same brands on Instagram, watch the same types of Reels, and click on the same style of ads.

Meta does not weight purchasing power when building lookalike audiences. The algorithm finds people who act like your customers online, not people who can afford to be your customers. For ecommerce brands selling products at $75+ price points, this mismatch silently drains ad budgets.

How the Algorithm Creates This Problem

Meta's lookalike model analyzes thousands of signals about your seed audience: their device types, browsing behavior, content engagement, group memberships, and app usage. It then finds the top 1% (or 2%, 5%, etc.) of the general population that most closely matches those behavioral patterns.

The critical gap is that income is not a direct signal in Meta's graph. Meta does not know what someone earns. It can infer spending behavior from some signals (like purchase history on-platform), but those inferences are noisy. A college student spending on credit looks behaviorally similar to a high-earner making discretionary purchases.

This means your 1% lookalike audience of 2-3 million people includes a proportional cross-section of income levels. If 40% of the US population earns under $50,000, roughly 40% of your lookalike audience does too. You are paying to show $200 product ads to people who window-shop but never buy.

The result is a ROAS that looks mediocre across the whole campaign while hiding strong performance in certain geographic segments and weak performance in others.

The ZIP Code Layer Solution

The fix is straightforward: keep your lookalike audience for its behavioral precision, but layer geographic targeting on top to filter for purchasing power. Here is how to do it.

Step 1: Build Your Lookalike Audience as Normal

Start with your standard process. Upload your customer list or use a website custom audience as your seed. Build a 1% lookalike (or 1-2% if your seed audience is smaller than 5,000). Do not change anything about how you create the lookalike itself.

Step 2: Create an Income-Filtered ZIP Code List

Pull demographic data for every ZIP code in your target market. Filter for ZIP codes where the median household income is at least $65,000 — or higher, depending on your product price point. A brand selling $50 items can target more broadly than one selling $500 items.

Use these income thresholds as starting points:

  • Products under $75: Median household income $55,000+
  • Products $75-200: Median household income $65,000+
  • Products $200-500: Median household income $80,000+
  • Products $500+: Median household income $100,000+

For most ecommerce brands targeting the continental US, this filtering removes 30-45% of ZIP codes. You will end up with a list of 15,000-25,000 ZIP codes, depending on your threshold.

Step 3: Apply the ZIP List as Location Targeting

In Meta Ads Manager, go to your ad set's location targeting. Instead of targeting "United States," switch to bulk location targeting and paste your filtered ZIP codes. Meta allows bulk upload of ZIP codes in the location field.

Your ad set now targets the intersection of two audiences: people who behave like your customers AND who live in areas with sufficient household income. The behavioral matching is still handled by Meta's algorithm. The income filtering is handled by your ZIP code list.

Step 4: Run A/B Tests to Validate

Do not take this on faith. Run a proper test. Create two identical ad sets: one with your standard lookalike targeting the full US, and one with the same lookalike layered with your income-filtered ZIP codes. Give each the same budget and run them for two weeks.

Track three metrics: cost per purchase, average order value, and ROAS.

Real Numbers: What to Expect

Across ecommerce brands selling products in the $75-300 range, ZIP code layering on Meta lookalike audiences consistently produces significant improvements:

  • ROAS improvement: The typical lift is from 2.5x to 4.0-4.5x. We use 2.5x to 4.2x as a representative range. That is not a marginal improvement — it is the difference between a campaign that barely breaks even and one that scales profitably.
  • Cost per purchase: Drops 25-40%, because fewer impressions are wasted on users who browse but never buy.
  • Average order value: Often increases 10-15%, because higher-income audiences are more likely to buy premium variants or add items to their cart.
  • Click-through rate: Usually stays flat or drops slightly. This is expected — you are reaching fewer total people. But the people you do reach convert at much higher rates.

The math works because you are not changing Meta's algorithm. You are just narrowing the geographic pool it draws from, ensuring that the behaviorally-similar users it finds also have the financial capacity to purchase.

Implementation Tips

Start with 1% lookalikes, not broader ones. The ZIP code layer already narrows your audience significantly. If you start with a 5% lookalike and then layer ZIPs, you may end up with an audience that is too small for Meta's delivery system to optimize effectively. Start at 1% and expand only if delivery is limited.

Do not combine ZIP targeting with other demographic restrictions. Meta's detailed targeting options (interests, behaviors, income brackets) are increasingly unreliable due to privacy changes. Using ZIP code income data as a geographic filter is more accurate than relying on Meta's in-platform income targeting, which is based on self-reported or inferred data. Pick one approach — the ZIP layer is the better one.

Refresh your ZIP list quarterly. Income data shifts, especially in fast-growing metro areas. A ZIP code that was below your threshold two years ago might be above it now due to new development, and vice versa.

Watch for delivery issues. If your ad set's estimated audience size drops below 500,000 after applying ZIP code targeting, Meta's algorithm may struggle to optimize. In that case, relax your income threshold slightly or expand to a 2% lookalike.

Test different income thresholds. Your optimal threshold depends on your product and margins. Run separate ad sets at $65K, $80K, and $100K median income thresholds for two weeks each. The winner becomes your baseline.

The Bigger Picture

Meta's lookalike audiences are a powerful tool with a blind spot. The algorithm is excellent at finding behavioral twins of your customers but has no mechanism to filter for ability to pay. ZIP code demographic data fills that gap cleanly, without fighting the algorithm or limiting its optimization capabilities. You keep what Meta does well and add what it cannot do on its own.

Ready to target smarter?

Stop wasting ad spend on broad targeting. Start with 5 free queries.

Start Your Free Trial