GA4 "(other)" in Google Sheets means you've hit the ~50K cardinality limit. Here are 5 fixes-from reducing dimensions to BigQuery export and smart connectors.
When GA4's (other) row appears in your Google Sheets report, it means you have exceeded GA4's cardinality limit for that query, roughly 50,000 unique dimension value combinations, and GA4 is rolling all remaining rows into a catch-all bucket. Your metric totals are still accurate; your per-row attribution is not. This guide explains exactly why it happens and five specific ways to fix it.
What GA4 (other) Actually Means
The Cardinality Limit Explained
GA4's reporting API applies a cardinality threshold to every query. When the number of unique values in a dimension, or the number of unique combinations across multiple dimensions in the same query, exceeds approximately 50,000 rows, GA4 cannot return the full result set. Instead, it rolls all excess rows into a single row labeled (other).
To be precise about what "(other)" contains:
- It includes all dimension values beyond the cardinality threshold.
- It does include their associated metric values (sessions, conversions, revenue, etc.).
- This means your total metrics are correct when you sum the full column, the total includes the (other) row.
- But any row-level analysis is wrong. If you are asking "how many sessions came from campaign X?", any campaign that got rolled into (other) will show a falsely low or zero number.
The Specific Impact on Google Sheets Reports
This problem is particularly sharp in Google Sheets reports because:
- Google Sheets is often used for per-campaign or per-page analysis, which requires accurate row-level data.
- The GA4 connector (whether native or third-party) does not warn you when cardinality thresholds are being hit, the (other) row just appears.
- People trust the numbers because the totals look right. Since aggregate metrics match, the data appears valid even when attribution is severely distorted.
A report showing (other) accounting for 40% of your sessions is effectively unusable for campaign-level optimization. Yet it looks credible at first glance.
Why This Happens in Google Sheets Reports
Dimension Combinations Multiply Cardinality
The 50,000 limit applies to the number of unique combinations of dimension values, not to any single dimension alone. Consider this example:
- You have 500 landing pages.
- You have 200 campaigns.
- You have 30 geographic regions.
Individually, none of these exceeds 50,000. But in a single query with all three as dimensions, the number of potential combinations is 500 × 200 × 30 = 3,000,000. GA4 hits the cardinality ceiling and starts collapsing rows into (other) very quickly.
Date Range Amplifies the Problem
A 90-day report naturally surfaces more unique dimension combinations than a 7-day report, more campaigns run, more pages get traffic, more sources become active. The longer your date range, the more likely you are to hit the cardinality limit with any given dimension combination.
Connector Query Structure Matters
Some GA4 connectors (including the native Google Sheets add-on) submit a single undivided query for the full date range and all requested dimensions. This maximizes the chance of hitting the cardinality limit. Connectors that break queries into smaller chunks, by date, by segment, or by dimension value subset, return more complete data.
Fix 1: Reduce Your Date Range
Why It Works
Fewer days = fewer unique dimension combinations = less chance of hitting the 50,000 threshold.
How to Apply It
In your GA4 data source settings (whether using the native connector or a third-party one), reduce the date range from 90 days to 30 days, or from 30 days to 7 days. Check whether (other) disappears or shrinks.
This fix is most appropriate for:
- Weekly operational reports where you only need the current week's data.
- Dashboards where a rolling 28-day window is sufficient.
Limitations
If you need trend analysis over a longer period, reducing the date range just moves the problem. In that case, consider chunking: pull the data in separate monthly queries and combine the Sheets tabs manually or with a QUERY formula that consolidates them.
Fix 2: Remove Secondary Dimensions
Why It Works
Every additional dimension you add multiplies the cardinality of the result set. Removing one dimension can reduce the unique combination count by an order of magnitude.
Audit Your Query Dimensions
Look at the GA4 query behind your Sheets report and ask: which dimensions are actually necessary for the decisions this report supports?
Common candidates for removal:
- Device category (mobile/desktop/tablet): Often added "for completeness" but rarely the primary analytical dimension.
- Geographic region combined with another dimension: If you are already segmenting by country, adding region multiplies the rows significantly.
- Landing page path + query string: Query strings create enormous cardinality. Use
Landing page(path only) rather than the full URL with query parameters.
Build Separate Reports for Different Dimensions
Rather than one report with eight dimensions, build three reports with two or three dimensions each:
- Report 1: Source / Medium + Campaign (traffic acquisition)
- Report 2: Landing Page + Device Category (content performance)
- Report 3: Country + Goal Completions (conversion geography)
Each query stays under the cardinality limit independently.
Fix 3: Use Filters to Narrow the Query
Why It Works
Filters reduce the universe of data GA4 considers before applying the cardinality limit. If you filter to a specific country, campaign type, or traffic source, the number of unique combinations in the remaining data may fall below 50,000.
Practical Filter Strategies
Filter by traffic source: If your report is about paid search performance, add a filter for Session source contains google and Session medium = cpc. This excludes organic, direct, referral, and social traffic from the query, dramatically reducing cardinality.
Filter by specific campaigns: If you are analyzing a campaign group, filter by campaign name containing a consistent naming convention prefix (e.g., all your paid campaigns start with "PD_"). This excludes untagged or organic traffic that would otherwise fill dimension slots.
Filter by country or region: If your analysis is geography-specific, apply a country filter to reduce the geographic dimension from 200+ countries to 1–5 relevant ones.
Filters vs. Segments
In GA4's API, filters are applied before the cardinality threshold is calculated, they reduce the dataset the query evaluates. Segments, in contrast, are applied post-query and do not help with the cardinality problem. Always use dimension filters, not segments, when trying to solve (other) row issues.
Fix 4: Query via BigQuery Export (Unsampled)
Why BigQuery Eliminates the (other) Problem
GA4's BigQuery export writes every individual event to a BigQuery table, no cardinality limits, no sampling, no (other) rows. If you query GA4 through BigQuery instead of through the GA4 Reporting API, you get complete, row-level data for every dimension combination regardless of volume.
Setup Requirements
- A Google Cloud project with billing enabled. BigQuery charges for storage and query volume, but small-to-medium GA4 properties typically cost less than $5/month.
- GA4 BigQuery linking. In GA4 Admin > BigQuery links, connect your GA4 property to your BigQuery project. Daily exports begin the day after you link (historical data requires a backfill export, which is available in GA4 for up to 13 months).
- A SQL query that replicates your GA4 report logic. This is where technical complexity enters, you need either SQL skills or a pre-built query template.
Sample BigQuery Query
To replicate a standard sessions-by-campaign report:
SELECT traffic_source.source AS session_source, traffic_source.medium AS session_medium, traffic_source.name AS campaign, COUNT(DISTINCT user_pseudo_id) AS users, COUNT(*) AS sessions FROM `your-project.analytics_XXXXXXXXX.events_*` WHERE event_name = 'session_start' AND _TABLE_SUFFIX BETWEEN '20250601' AND '20250630' GROUP BY 1, 2, 3 ORDER BY sessions DESC
Connecting BigQuery Results to Google Sheets
Use the Google Sheets BigQuery connected sheet feature (available in Google Workspace Business Standard and above) or export query results directly to Sheets via the BigQuery console. The data in Sheets is then free of all GA4 API cardinality constraints.
Limitations
BigQuery requires technical setup and ongoing maintenance. It is the right tool for high-volume properties (500,000+ monthly sessions) where cardinality problems are persistent and severe. For smaller properties, Fixes 1–3 or Fix 5 are more practical.
Fix 5: Use a Connector with Pagination and Chunking
Why Standard Connectors Fail
Most GA4 connectors, including the native Google Sheets GA4 add-on, submit a single API request covering the full date range and all requested dimensions. This single request hits the cardinality ceiling fastest.
Connectors that implement query chunking break the request into smaller pieces:
- Requesting data one week at a time instead of one month at a time.
- Requesting data for one traffic source at a time and then combining the results.
- Using the GA4 API's pagination to retrieve results in batches of 10,000 rows and assembling them on the client side.
What to Look for in a Connector
When evaluating a GA4 connector for Sheets, ask:
- Does it handle pagination automatically and return complete result sets?
- Does it split queries by date range sub-intervals when cardinality limits are detected?
- Does it alert you when (other) is present in the returned data?
- Can you configure the query to exclude dimensions that inflate cardinality?
How brooked.io Handles Cardinality Limits
brooked.io is designed with this exact problem in mind. When pulling GA4 data into Google Sheets, it:
- Chunks queries by date interval to stay below per-request cardinality thresholds.
- Paginates through results to retrieve complete data sets rather than truncated ones.
- Alerts you if (other) is detected in a query result, so you know your report has an attribution problem rather than discovering it later.
- Lets you configure dimension subsets for different report tabs, so a "by campaign" tab and a "by landing page" tab use separate optimized queries rather than one overloaded combined query.
The result: the same GA4 data, written into Google Sheets completely and accurately, without (other) rows in the reports you rely on.
Fix Comparison Table
| Fix | Eliminates (other) Completely? | Technical Complexity | Best For |
|---|---|---|---|
| Reduce date range | Sometimes | Low | Short-period operational reports |
| Remove secondary dimensions | Sometimes | Low | Any report; good first step |
| Use dimension filters | Sometimes | Low–Medium | Reports focused on a segment |
| BigQuery export | Yes (unsampled) | High | High-volume properties, SQL users |
| Smart connector (brooked.io) | Usually yes | Low | Most SMBs and mid-market teams |
Troubleshooting
The (other) row is present but small (under 5%). Should I worry? A small (other) row (under 2–3% of total sessions) is usually acceptable, it means only a tail of very-low-volume dimension combinations got bucketed. However, for conversion attribution reporting, even a small (other) bucket can distort your understanding of which campaigns drove results. The threshold for "acceptable" depends on your use case.
I removed dimensions but (other) is still there The date range is likely the primary driver in your case. Try reducing from 90 days to 30 days first. If (other) disappears, you know date range is the binding constraint.
I applied a filter and (other) got bigger This is counterintuitive but possible: filtering to a smaller traffic segment can surface relative cardinality that was hidden when totals were larger. For example, filtering to a single campaign that uses many UTM variants can produce (other) even with a small filter set. In this case, use BigQuery or a chunking connector.
My report totals changed after fixing (other) They should not, the total metrics in a GA4 report always include the (other) row's contributions. If totals changed, verify your date range or filter did not inadvertently exclude data. The (other) row's metrics were real; they just lacked accurate dimension attribution.
The GA4 connector I use does not have a chunking option You have two paths: switch to a connector that supports chunking (like brooked.io), or implement the chunking manually by creating separate report tabs for separate date ranges and combining them with a QUERY formula in a master tab.
Bottom Line
GA4's (other) row is not a bug in your Sheet or your connector, it is a hard architectural constraint in GA4's Reporting API. Your metric totals are right, but per-row attribution is wrong wherever (other) appears, and that makes the report unreliable for campaign-level decisions.
The fastest fixes are to reduce your date range, remove unnecessary secondary dimensions, and apply dimension filters. For persistent cardinality issues, BigQuery export or a connector built with pagination and chunking provides a complete, (other)-free result set without requiring you to redesign your reporting.
Fix Your GA4 Reports with brooked.io
brooked.io pulls GA4 data into Google Sheets using chunked, paginated queries that stay within cardinality limits, so your reports show complete, accurate attribution data without (other) rows. Connect your GA4 property and see the difference on your first sync.
Internal link suggestions:
- "Looker Studio Taking Forever to Load? The Real Cause (and 3 Ways to Fix It)" →
/looker-studio-slow-loading-fix - "How to Build a Real-Time Business Dashboard Without a Data Team" →
/real-time-dashboard-without-data-team - "Why Google Sheets Formulas Don't Update Automatically" →
/google-sheets-formulas-not-updating
Troubleshooting quick reference
Frequently asked questions
Does the (other) row mean my GA4 data is sampled?
Not necessarily. Sampling and cardinality are two different GA4 limitations. Sampling reduces the number of events processed before calculating metrics. Cardinality limits the number of unique dimension combinations returned. You can have unsampled data that still shows (other) rows if you exceed the cardinality threshold. BigQuery export is unsampled AND avoids cardinality limits, which is why it is the definitive solution for large properties.
Why do my GA4 totals look right but individual rows seem off?
This is the defining characteristic of the (other) problem. GA4 correctly includes the (other) bucket's metrics in the report total. So SUM(sessions) is accurate, but any campaign, page, or source that got rolled into (other) shows falsely low or zero individual metrics. This is especially dangerous in reports where people make budget decisions based on per-campaign performance.
Can I see what is inside the (other) bucket?
Not directly through the GA4 Reporting API. The (other) bucket is an API-level aggregation, GA4 does not expose the constituent rows. The only way to see the data that was collapsed is to query via BigQuery, which bypasses the cardinality limit entirely and returns all rows individually.
Is this a GA4-specific problem, or did Universal Analytics have it too?
Universal Analytics had a similar "(other)" row behavior and applied sampling to large queries. GA4 replaced sampling with the cardinality limit approach. For most users, GA4's behavior is better (totals are accurate, just attribution is limited) than UA's sampling (which could distort totals as well). But the (other) problem in GA4 reports is distinct from UA's issues and requires different fixes.
Will this problem get worse as my site grows?
Yes, generally. More traffic means more unique campaign, page, and source combinations. A site with 10,000 monthly sessions rarely hits cardinality limits; a site with 500,000 monthly sessions hits them routinely for any multi-dimension report. Plan for this by establishing a BigQuery export or a smart connector early, before the (other) row becomes a major issue.
Ready to connect your data to Google Sheets?
Brooked's free tier covers 100 imports per month with AI Analyst included, no credit card required.
Install Brooked free →

