What are Monthly Active Rows?
A transparent look at the metric defining legacy ETL costs, and why modern teams are moving to volume-based streaming.
Defining the MAR
Monthly Active Rows (MAR) is the number of distinct primary keys synced from your source system to your destination in a given calendar month.
- Distinct Primary Keys: You are charged based on unique IDs, not total volume.
- Updates & Deletes Count: Modifying a row counts as "active." Deleting a row also counts as "active."
- Synthetic Keys: If no primary key exists, one is hashed for you—often inflating counts.
How MAR Math Works
Scenario A: The "Free" Update
You update Row ID #123 on Jan
1st.
Count: 1 MAR
You update
Row ID #123 again on Jan 15th.
Count: 0 MAR (Already
Active)
Scenario B: The "Hidden" Inflation
You have a JSON blob column. You normalize it into 5 separate child tables.
One update
to the source record triggers updates in 5 tables.
Count: 5
MARs for 1 Data Event
Why MAR is Painful for Modern Data
While MAR claims to align with value, execution often feels like "smart value extraction." Here is why it hurts.
Normalization Inflation
Fivetran's normalization of nested data (like JSON) splits one record into many. A single source event can explode into multiple billable MARs.
The Ghost of Connection Pricing
New pricing models isolate MAR by connector, removing bulk discounts. "It’s harder to justify building and maintaining a new connector that will be low volume."
Unpredictability
"Lack of predictability in costs." It is nearly impossible to forecast how many unique primary keys will be touched by upstream application changes.
Penalty for Speed
MAR discourages frequent syncing. To save money, engineers slow down syncs, killing the real-time potential for AI and operational dashboards.
The Streamkap Alternative
Stop counting keys. Start measuring physics. Streamkap charges by Data Volume (GB).
| Fivetran (MAR) | Streamkap (GB Volume) |
|---|---|
| Complex: Based on unique primary keys, normalization, and connector isolation. | Simple: Based on the raw size of data moved. |
| Punishes Normalization: Normalizing complex JSON adds cost. | Agnostic: 1GB of JSON is 1GB of data, regardless of how you structure it. |
| Opaque: Hard to audit which keys were "active." | Transparent: Easy to verify against database logs. |
| Encourages Latency: "Sync less to pay less." | Built for Speed: Real-time is the default standard, not a luxury. |