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.
"Any update to an existing row, no matter how minor, would typically count that row as active for the month. For data sources with high update frequencies, this could lead to substantial MAR 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.
Stop Counting Rows