# ELT Pricing Models Explained: MAR vs Credits vs Rows, With Cost Examples

> Fivetran MAR, Airbyte credits or Erathos rows? See how each ELT pricing model works and what one real workload costs on each.

Source: https://www.erathos.com/en/blog/elt-pricing-models-mar-vs-credits-vs-rows
Em português: https://www.erathos.com/blog/elt-pricing-models-mar-vs-credits-vs-rows
Published: 2026-11-02
Category: Tool Guides

![ELT Pricing Models Explained](https://cms-media.erathos.com/ELT Pricing Models Explained.png)

You’re comparing three ELT tools and have opened three tabs with their pricing models. One tool bills by monthly active rows, one uses a credit system and one charges for rows loaded to your warehouse. All three have a ‘per million’ cost but they’re not comparing like with like. So when your CFO asks you what your data stack is going to cost next month, nobody can give a number.

The differences are large. Taking the example company that we’ll price later in this article (5 million API rows a month + 10 GB Postgres database), the list price for such a service ranges from US$ 140 to US$ 2,180 a month, depending on how they bill.

## Why ELT prices are hard to compare

ELT tools do the same job: copy data from sources like HubSpot, Stripe or Postgres into a warehouse. But they meter that job in four different units:

Pricing unit

Used by

What it counts

How databases are counted

Monthly active rows (MAR)

Fivetran

Distinct rows that changed in the month, per connection

Same as APIs, by row

Credits

Airbyte Standard and Plus

Rows for APIs, gigabytes for databases and files

By GB, after Airbyte converts the data

Capacity (Data Workers)

Airbyte Pro and Enterprise Flex

How many syncs can run at the same time

No charge by volume

Rows written

Erathos

Every row written to your warehouse in the month

Same as APIs, by row

Some workloads are more advantageous to some units over others. For example, a single record that updates 30 times over a month is [one MAR on Fivetran](https://fivetran.com/docs/usage-based-pricing). On tools that count the number of rows moved, it could cost more based on the number of syncs that the row was written to. Likewise, a database with a lot of wide rows would be more expensive under a pricing unit based on GBs versus rows.

**\[IMAGE 1: upload elt-pricing-img1.png here\]**

## What are Monthly Active Rows (MAR) in Fivetran?

Monthly active rows are the distinct rows Fivetran adds, updates, or deletes in your destination during a given calendar month, as identified by primary key. A single primary key [synced 30 times in one month counts as one MAR](https://fivetran.com/docs/usage-based-pricing).

This is kind to frequently updated data. If a HubSpot deal is updated 10 times in May, that costs as much as if it had changed once.

Fivetran counts MAR separately by account, destination, connection, and table. If you sync the same Postgres table to two warehouses, MAR for that table counts twice. If a table doesn’t have a primary key, Fivetran generates a hashed key from the row, and then every row in that table counts toward MAR.

Here’s an example of how that plays out for a single frequently-updated record:

**\[IMAGE 2: upload elt-pricing-img2.png here\]**

The initial sync for a table doesn’t count historical data against MAR. Also, each new connection gets 14 days of free usage, and some re-syncs are free (such as historical data brought in after adding a column).

MAR can grow surprisingly fast due to several things:

- **Deletes.** Since January 1, 2026, [deleted rows count as paid MAR](https://fivetran.com/docs/core-concepts/usage-based-pricing/pricing-updates/2026-pricing-updates).
- **History mode.** Every change creates a new row in the history table, so each change counts against MAR.
- **Touching old records.** If a source job touches old records (even years old) on every run, then a large percentage of the table may count against MAR.
- **Rollback syncs.** Ad and reporting connectors often re-read past days to account for conversions, and those rows count as new MAR for the current month.
- **Automatic re-syncs.** MongoDB will re-sync a table if its change log runs out, and Oracle will re-sync a table when you add a column.

### How Fivetran turns MAR into dollars

Fivetran pricing for connections is based on usage per connection, with the highest price per million MAR on the first million for that connection, then the price per million goes down for more usage. However, [you cannot aggregate MAR across connections](https://www.fivetran.com/legal/service-consumption-table) in order to get into a cheaper pricing tier.

These are the first tiers of the Standard plan list price, effective February 1, 2026:

MAR on one connection

Base per month

Plus, per million MAR above the start of the tier

1 to 1M

US$ 5

US$ 495

1M to 4M

US$ 500

US$ 170

4M to 16M

US$ 1,010

US$ 58

16M to 64M

US$ 1,706

US$ 19.70

The cost is the base for your tier plus MAR above the tier start multiplied by the rate. So a connection with 847,574 MAR would cost US$ 5 + 0.847574 x US$ 495 = US$ 424.55. This number is within one cent of rounding to the [Marketo example on Fivetran’s pricing page](https://www.fivetran.com/pricing) (US$ 424.54).

The base of US$ 5 is the cost of each connection with between 1 and 1M MAR in a given month. If you have many small connectors, you pay the base on each of them. Connections with no paid MAR are free, and there’s a Free plan with up to 500,000 MAR a month.

## How does Airbyte credit pricing work?

The Standard and Plus plans for Airbyte Cloud bill customers using credits. For API sources, customers are charged [6 credits per million rows](https://docs.airbyte.com/platform/cloud/managing-airbyte-cloud/manage-credits); for databases and files, they’re charged 4 credits per GB.

To calculate the cost per row, you need the price per plan, which can be found on the [Airbyte pricing page](https://airbyte.com/pricing):

- **Standard** costs US$ 20 per month (and includes 5 credits; customers are charged US$ 5 per credit after that). The minimum time between syncs on the Standard plan is one hour.
- **Plus** costs US$ 189 per month (and includes 40 credits; additional credits cost US$ 5 each). There are discounts for buying additional credits, such as US$ 449 for 100 credits and US$ 1,799 for 500 credits. Sync frequency can be set to every 15 minutes.

On the Standard plan, additional credits are US$ 5 each, so API rows cost US$ 30 per million, and database GB cost US$ 20 each. According to Airbyte, the Plus plan is cheaper than Standard for customers who use 40 or more credits a month.

The actual sync type determines what rows are actually billed. For API sources, Airbyte typically charges based on the number of rows inserted, updated or deleted since the previous sync was completed. Full refresh sync types charge based on the total rows being synced on each and every execution.

### Why database GB can be bigger than your database

This is how Airbyte measures database volume. After it reads each row from your database, Airbyte converts each to an Airbyte Protocol record. This record [is likely to be larger than the data you see when you query your database](https://docs.airbyte.com/platform/cloud/managing-airbyte-cloud/manage-credits). How much larger depends on how your database stores and compresses its data.

A database stores numbers, dates and true/false values in compact binary form. A protocol record writes them out as text, and it repeats every column name in every row. To see the size of that gap, we loaded 1 million rows of a simple orders table into Postgres 15. The table had an ID, customer ID, status, amount, currency, two timestamps and a test flag. Then we converted every row into an Airbyte record message and counted the bytes:

`Rows: 1,000,000`
`pg_relation_size (heap): 85,876,736 bytes`
`pg_total_relation_size (heap + indexes + auxiliary): 108,421,120 bytes`
`Airbyte RECORD JSONL (UTF-8, including newlines): 275,796,898 bytes`
`JSON / heap: 3.211544x`
`JSON / total: 2.543756x`

Those same rows in Postgres take up 108 MB including the index and 276 MB as records. That is 2.5 times larger. Airbyte does not publish how many bytes they use to represent those rows, and there is no published conversion factor between the stored representation and the serialized representation. Treat 2.5x as the result of one table, not as some universal rule. Your own results will be dependent on your own column types. On each full refresh of a table you will pay for the full serialized size of the table again.

**\[IMAGE 3: upload elt-pricing-img3.png here\]**

## Capacity pricing: Airbyte Data Workers

Pro and Enterprise Flex users on Airbyte are on fixed cost plans that aren't based on volume. [Pricing is for a number of Data Workers](https://airbyte.com/pricing). Each Data Worker is a slice of compute used to run syncs. Typically each Data Worker can handle running about three syncs in parallel.

Airbyte publishes rough figures for how much of a worker each running sync uses:

Source type

Share of one Data Worker per running sync

Database

About 0.5

File

About 0.25

Custom connector

About 0.25

API

About 0.2

These shares are [defaults, not contract terms](https://docs.airbyte.com/platform/cloud/managing-airbyte-cloud/manage-data-workers). If more syncs are needed than there are workers available, new syncs will be queued until workers become free. If more capacity is needed during high-traffic times, you can add extra capacity on demand at a premium rate.

This pricing model is ideal for teams who have a lot of data volume, but whose syncs don’t overlap much. For example, a team with hundreds of millions of rows being synced from a handful of databases will pay the same as a team syncing far fewer rows. But if that team has many connectors that all start their syncs at the top of the hour, they’ll either need more workers to handle the load or to accept that some of their syncs will queue.

Airbyte doesn’t publish a price per Data Worker, so you’ll need to get a quote from a sales representative to accurately price out this model.

## Erathos: rows written to the warehouse

Erathos charges per row loaded into your warehouse each month. A row is a row for both APIs and databases. One row from Postgres equals one row from Stripe. No conversion to GB necessary.

These are the [published Erathos plans](https://www.erathos.com/en/pricing?utm_source=blog&utm_medium=organic&utm_content=bydefault&utm_campaign=elt-pricing-models-explained) at their entry tier:

Plan

Rows per month

Billed monthly

Billed yearly (per month)

Update frequency

Freemium

Up to 1M

US$ 0

US$ 0

Daily

Movement

2M

US$ 35

US$ 29

Hourly

Pro

5M

US$ 300

US$ 250

Every 5 minutes

Enterprise

Up to 1.5 billion

Custom

Custom

Custom

Both Movement and Pro plans have a slider to set the plan row size up to 300M rows. For 10M rows, Movement would be US$ 140 when billed monthly, and US$ 117 monthly when billed yearly, while the Pro plan would be US$ 410 monthly and US$ 342 monthly when billed yearly. This means with yearly billing, you’d pay for 10 months and get 12 months. There is no limit on the number of connectors and integrations with paid plans. The Freemium plan can run 5 pipeline jobs.

The platform shows current usage and forecasted usage until the end of the month. If the forecasted usage exceeds your current plan, Erathos will send an email so you can modify your jobs or upgrade your plan before the month is over. There isn’t a per-row price for exceeding the usage listed on the pricing page.

There are 2 ways to get a sense of the usage before you pay. When creating a new account, you get access to the Pro plan for 14 days, without a credit card. Also, each new connection gets 2 weeks of trial before contributing to your plan, which allows you to see how much more usage a new source will add.

A record that changes frequently and is written on many syncs would count each time it is written, unlike Fivetran, which would count it once. Also, on full refresh syncs, the entire table is written again, which means [a 5M-row table on a full refresh counts 5M rows per run](https://www.erathos.com/en/blog/data-management-tools-8-categories-30-platforms?utm_source=blog&utm_medium=organic&utm_content=bydefault&utm_campaign=elt-pricing-models-explained). To keep that number down, it would have to be an incremental sync, which requires a primary key and a date column.

## One workload, four bills

Here is an example company priced for a normal month after setup.

- **HubSpot**: 3M records added or changed in the month.
- **Stripe**: 2M records added or changed in the month.
- **Postgres**: a 10 GB database with 20M rows, about 500 bytes per row. It syncs incrementally, and 2M rows change each month, which is about 1 GB of stored data.
- Each changed record syncs once. For this example, rows synced, MAR and rows written are all the same number.
- List prices, billed monthly, on each vendor’s entry plan for this volume.

Here is how those inputs translate to each unit:

**\[IMAGE 4: upload elt-pricing-img4.png here\]**

### Fivetran: MAR, per connection

Each source is its own connection, priced on its own curve from the Standard table above:

`HubSpot    3M MAR:  $500 + (3 - 1) x $170  =  $840`
`Stripe     2M MAR:  $500 + (2 - 1) x $170  =  $670`
`Postgres   2M MAR:  $500 + (2 - 1) x $170  =  $670`
`Total                                         $2,180 per month`

Splitting the volume over multiple connections actually increases the cost of the connections, because if those 5M rows of API data had been received over a single connection, the cost would have been $1,010 + (5 - 4) x $58 = $1,068 as opposed to $840 + $670 = $1,510.

### Airbyte: credits

API rows convert at 6 credits per million. Postgres converts at 4 credits per serialized GB. With the 2.5x size gap from the test above, 1 GB in Postgres becomes about 2.5 GB in transit:

`API rows   5M x 6 credits                    = 30 credits`
`Postgres   1 GB x 2.5 = 2.5 GB x 4 credits   = 10 credits`
`Total                                          40 credits`

`Standard   $20 (includes 5 credits) + 35 x $5 = $195 per month`
`Plus       40-credit package                  = $189 per month`

If the serialized size was equal to the stored size, then Postgres would take 4 credits and the total would be 34 credits or $20 + 29 x $5 = $165 on Standard. So the actual number on Airbyte for this company is somewhere between $165 and $195 depending on the exact serialization of the tables in question.

### Airbyte: Data Workers

These three syncs use 0.2 + 0.2 + 0.5 = 0.9 of a Data Worker (when they’re all running at once) so they fit within 1 worker. Since Airbyte doesn’t publish a price for Data Workers, we can’t put a number here.

### Erathos: rows written

APIs and Postgres count the same way:

`HubSpot + Stripe   5M rows`
`Postgres           2M rows`
`Total              7M rows written  ->  10M tier`

`Movement 10M   $140 per month  ($117 per month billed yearly)`
`Pro 10M        $410 per month  ($342 per month billed yearly)`

### The four bills side by side

Pricing unit

Plan

Monthly list price

Fastest sync on that plan

Rows written

Erathos Movement, 10M

US$ 140 (US$ 117 yearly)

Hourly

Credits

Airbyte Standard

US$ 165 to US$ 195

Hourly

Credits

Airbyte Plus

US$ 189

Every 15 minutes

Rows written

Erathos Pro, 10M

US$ 410 (US$ 342 yearly)

Every 5 minutes

MAR

Fivetran Standard

US$ 2,180

Every 15 minutes

Capacity

Airbyte Pro or Enterprise Flex

Not published

Every 5 minutes

Here is the same comparison as a chart (without Data Workers):

**\[IMAGE 5: upload elt-pricing-img5.png here\]**

This comparison only works for this specific workload, where each record only changes once a month. It doesn't work when records change often, such as if each of the 5M API records changed and synced 10 times in the month. If that was the case, the Fivetran bill would still be US$ 2,180, but credit and row counts could grow up to 10 times larger.

## What changes the bill under any model

The price per million is not as important as your pipeline’s behavior. There are some workload characteristics that can change the bill for each pricing model:

- Full Refresh vs Incremental: Full refresh reloads the entire table every time it’s run. On Airbyte, any full refresh of a table means that every row is counted as used. On Erathos, a full refresh will rewrite every row. For example, a full refresh of the 20 million row Postgres table would be 20 million x 30 = 600 million rows per month, not 2 million.
- Sync frequency: More frequent syncing will result in more updates to the same active record, leading to more credits and rows used. The MAR would stay the same. In addition, each plan has a different frequency limit, so if you need to run every 15 minutes, you may have to upgrade to a higher plan on Airbyte or Erathos.
- Deletes and history: Fivetran counts deletes as active MAR. In addition, Fivetran’s history mode adds another row for each update, which counts as active MAR.
- Re-syncs and schema changes: Fivetran does not charge for historical data added due to a new column. Some sources, however, will automatically re-sync the entire table. For example, Oracle will re-sync after adding a new column, and MongoDB will re-sync if the change log has been exhausted.
- First month: Fivetran’s initial syncs are free for any historical data. On Airbyte, the first load of the entire 10 GB database at the same 2.5x would be 25 GB, or 100 credits. On Erathos, each connection has a 2 week trial period before being charged.

Billing rules decide what happens when you go over, and when you pay:

Vendor

When usage passes the plan

When you're billed

Minimum spend

Fivetran

Pay-as-you-go keeps billing by MAR

[Monthly, in arrears](https://fivetran.com/docs/core-concepts/usage-based-pricing/billing-and-plans)

None on monthly; US$ 12,000 a year on annual contracts; US$ 5 per small connection

Airbyte (credits)

Syncs keep running, extra credits at US$ 5

Overage in arrears, with an automatic charge once it passes US$ 10,000

US$ 20 a month on Standard

Erathos

Email when the forecast passes your limit; no published per-row overage rate

Monthly or yearly plan

US$ 0 on Freemium; US$ 29 a month for Movement billed yearly

Since Fivetran and Airbyte bill in arrears, you can’t know how much a bad month cost you until that month is over. A forecast alert lets you know before it’s too late to make adjustments to your jobs.

## How to estimate your cost before signing

This can be estimated in about an afternoon, then confirmed with a trial:

1. **Map out your sources and destinations.** Fivetran charges per connection. Data is counted twice if you send it to two warehouses.
2. **Find out how many changes happen per table every month.** On a database table with an updated-at column, run a query to get the number of rows and size of rows that changed in the last 30 days.
3. **Identify tables that can't be incrementally synced.** Tables without a primary key or updated-at column will be fully refreshed, so multiply the full table size by the number of syncs per month.
4. **Choose a sync frequency.** Whether it's hourly or every-15-minutes affects your plan for Airbyte and Erathos. It can also cause often-updated records to be counted multiple times on a per-row plan.
5. **Convert to each pricing unit.** Calculate MAR based on distinct changed records, Airbyte credits from rows plus serialized GB, and Erathos from total rows written. For database volume, multiply stored size by your own measured ratio, not ours.
6. **Try on your actual sources.** Fivetran offers 14 free days for every new connection and a [pricing estimator](https://fivetran.com/pricing-estimator). Airbyte gives you 14 days or 400 credits for free, and has billing alerts. Erathos offers 14 days of Pro, and shows usage forecast for the month.
7. **Get billing terms in writing.** Ask about overages on any month, whether you're paying in arrears, and minimums on annual contracts.

This is the query for step 2, on the orders table from the test above:

`SELECT`
`    count(*) AS changed_rows,`
`    pg_size_pretty(sum(pg_column_size(orders))) AS stored_size`
`FROM orders`
`WHERE updated_at >= now() - interval '30 days';`

`changed_rows | stored_size `
`--------------+-------------`
`        86105 | 6240 kB`
`(1 row)`

A row that has changed several times in a month is only counted once, which is why the result is close to the MAR of the table and also the lowest number of rows written and API credits.

## FAQ

**Does Fivetran count a row updated many times as one MAR?** Yes, updates on rows with the same primary key in the same calendar month are counted as a single MAR, even if the row is updated 30 times in that month. However, MAR is counted separately per connection, table, and destination.

**Which ELT pricing model is cheapest?** Pricing depends on the frequency of data updates. Row-based and credit-based plans tend to be more cost-effective when most records are updated only once or twice a month, as in the example above. In contrast, plans that charge based on MAR are usually better when the same records are updated many times within a month. Capacity-based pricing is best suited for scenarios where a large volume of data needs to be moved through a small number of concurrent syncs.

**Does Airbyte charge for full refresh syncs?** Yes, Airbyte charges for every row synced in full refresh modes on every sync run. For databases, Airbyte charges for the serialized size of the entire table on each sync run.

**How much is one Airbyte credit?** On the Standard and Plus tiers, additional credits are US$ 5 each. The Standard tier includes 5 credits for US$ 20 per month, while Airbyte’s Plus bundles are slightly more affordable, such as 100 credits for US$ 449.

**Do databases and APIs cost the same on Erathos?** Yes, the source does not matter. Each row added to your data warehouse is considered a single row. For a more in-depth comparison of Erathos and Airbyte’s pricing and other features, see our [Erathos vs Airbyte comparison](https://www.erathos.com/en/blog/erathos-vs-airbyte-data-integration-platform-2026?utm_source=blog&utm_medium=organic&utm_content=bydefault&utm_campaign=elt-pricing-models-explained).

**What happens if I go over my plan?** For Fivetran pay-as-you-go plans and Airbyte credit-based plans, your syncs will continue to run, and the additional usage will be charged after the end of the month. On Erathos, you will receive an email if your usage for the month is forecast to exceed your plan’s limit, so you can adjust your jobs or upgrade before hitting the limit.

**Is there a free tier?** Fivetran Free includes up to 500,000 MAR per month. Erathos Freemium includes up to 1M rows per month. Airbyte Cloud offers a 14-day or 400-credit trial.

## Try it on your own data

The quickest way to estimate the usage is to set up some of your actual sources and let them run for some time. [Get a 14-day free trial](https://app.erathos.com/signup?utm_source=blog&utm_medium=organic&utm_content=bydefault&utm_campaign=elt-pricing-models-explained) of our Pro plan with no credit card required and see the monthly forecast before committing to a plan.
