Crypto maker and taker fees can both apply to one limit order. The quantity that immediately trades against resting orders is taker execution; a remainder that joins the book can later execute as maker. Reconcile fees from each distinct fill's liquidity role, executed value, charged amount and fee asset, rather than assigning one rate to the entire order.
A limit price constrains the execution price. It does not, by itself, promise a maker classification. That distinction explains why a completed order can show a total commission between the maker-only and taker-only estimates without any quantity being charged twice.
The liquidity role belongs to each execution
In ordinary continuous order-book trading, a buy limit can take available asks at or below its ceiling. If eligible selling quantity runs out before the order finishes, its remaining quantity may rest at the limit price, subject to the instruction's lifetime and venue rules. Another trader can subsequently sell into that resting bid.
Coinbase Advanced's fee explanation explicitly describes this split: the immediately matched portion pays taker fees, while the remainder placed on the book pays maker fees when matched. This is a documented venue example of the general execution distinction, not a fee quote for another exchange or product.
The same order ID therefore need not imply the same role for every fill. Nor does a partial fill establish that anything was passive: several immediate taker executions can consume different price levels before a remainder rests. The market-versus-limit order guide explains the underlying price permission; the question here is how to account for the resulting fee mixture.
Follow one order from immediate trades to a resting fill
Consider a hypothetical spot market, ABC/USDT. An account starts with 2,000 USDT and no ABC, and submits one good-till-canceled buy for 10 ABC with a limit of 100 USDT per ABC. Post-only is disabled. Assume no competing orders, transfers, rebates or other account activity.
At arrival, the eligible asks contain 2 ABC at 99.90 and 3 ABC at 100.00. The next ask is above the limit. Five ABC can trade immediately; the other five join the bid book at 100.00. Later, an incoming sell fills that remainder.
For this worksheet only, the taker rate is 0.10% and the maker rate is 0.04%, both charged in USDT. These rates are invented and are not a current exchange schedule. Assume the shown fee precision is permitted.
| Distinct fill | Execution event | ABC filled | Price, USDT/ABC | Quote notional, USDT | Role | Fee, USDT |
|---|---|---|---|---|---|---|
| A | Immediate match | 2 | 99.90 | 199.80 | Taker | 0.19980 |
| B | Immediate match | 3 | 100.00 | 300.00 | Taker | 0.30000 |
| C | Later match against the resting bid | 5 | 100.00 | 500.00 | Maker | 0.20000 |
| Total | Order completely filled | 10 | — | 999.80 | Mixed | 0.69980 |
After A and B, the account has bought 5 ABC for 499.80 USDT and incurred 0.49980 USDT of taker fees. Five ABC remain live. After C, gross purchases total 10 ABC and fees total 0.69980 USDT. There is no remaining order quantity.
Because the example charges fees in quote currency, final holdings are 10 ABC and 2,000 − 999.80 − 0.69980 = 999.50020 USDT. Each executed unit belongs to one fill and has one applicable role in this model. The presence of both rates does not mean charging the maker rate and taker rate on all 10 units.
If the resting five ABC had instead been canceled before any later execution, only A and B would belong in the realized fee total. Expected maker fees on the canceled quantity would remain an unused estimate. The partial-fill management guide covers the separate inventory and remainder decisions.
Weight the rate by executed value, not fill count
When fees are proportional to quote notional and paid in quote currency, an illustrative calculation is:
Total fee = sum of (fill quantity × fill price × applicable fill rate)
For the example, taker notional is 499.80 USDT and maker notional is 500.00 USDT. The calculation is 499.80 × 0.001 + 500.00 × 0.0004 = 0.69980 USDT.
The effective fee rate on executed notional is 0.69980 ÷ 999.80, or approximately 0.069994%, equivalent to 6.9994 basis points. One basis point is 0.01 percentage points. This effective rate is a summary of the observed mix, not a new rate to apply to future orders.
An arithmetic average of the three rows' rates produces (0.10% + 0.10% + 0.04%) ÷ 3 = 0.08%. Applying that to the whole notional gives 0.79984 USDT, which is wrong. Splitting one execution into more records should not change the economics; counting records gives it that power.
Labeling the entire order maker would produce 0.39992 USDT, understating the fee by 0.29988. Labeling it entirely taker would produce 0.99980 USDT, overstating it by 0.30000. Preserve the fills even when the interface also displays a blended rate.
The example's fee-inclusive acquisition cost per ABC is (999.80 + 0.69980) ÷ 10 = 100.04998 USDT. That exceeds the 100 limit without any execution price violating the ceiling. Commission is a separate cost in this worksheet.
Preserve the exchange's fill evidence
A useful record retains the venue, account, market, order ID, distinct execution ID, execution time, quantity, price, liquidity role, fee amount and fee asset. Preserve the raw fields alongside any normalized labels. A reported role that the importer does not understand should remain unresolved rather than silently becoming maker.
For Coinbase Exchange specifically, the Get all fills API documentation defines a fill as a partial or complete match on an order. Its liquidity field uses M for maker and T for taker, and its fee field reports the charge for that individual fill. The same reference includes order and trade identifiers, price, size and settlement information. These Exchange API fields should not be assumed to describe the Advanced API's response shape.
Use the documented account-execution role. A public trade's direction label, an order's buy/sell side or the time between submission and receipt of an update is not a substitute for that evidence. A late-arriving taker fill remains taker; delivery delay does not make it passive.
Keep native fee assets intact. If some deductions are in base units or a separate token, adding their raw numbers to USDT fees produces a meaningless total. First reconcile each currency, then use an explicit valuation policy for a common reporting amount. The fee-currency worksheet handles that accounting without treating a converted value as another cash deduction.
Reconcile the order in five passes
- Collect the complete fill set. Query the relevant order and follow the venue's pagination rules. A first page or early order acknowledgement may contain only part of the eventual history.
- Deduplicate executions. Use identifiers with their documented account and market scope. The same fill observed through a stream and a history request is still one economic event.
- Check quantity and notional. Sum distinct execution quantities and values; compare the quantity with the authoritative order total. Keep canceled and still-live quantities separate.
- Check fees by currency and role. Sum recorded charges. Independently calculate expected charges from the applicable terms, retaining rounding and discount assumptions. Explain any difference rather than replacing the reported charge with the estimate.
- Verify the account movement. Match the resulting asset changes and order remainder to fresh account evidence. Flag missing fees, unsettled observations or unexplained differences before using the reconstructed amount for another decision.
This process separates two questions: what the fills cost, and whether the local history is complete. A plausible blended percentage does not prove completeness. A missing maker fill could leave both the quantity and fee understated while the remaining records still look internally consistent.
Resolve unexpected fees before changing the order policy
Start with the recorded role, then inspect the applicable product, pair, account tier, discount, fee currency and rounding. Maker and taker rates can be identical; a mixed order then need not produce a visibly intermediate fee rate. Do not treat a headline public rate as the account's confirmed charge. Coinbase Advanced, for example, states that its fee tier at order placement determines fees rather than the tier after the order; that is a venue-specific rule, not a universal timing convention. Coinbase Advanced fee terms.
If the intended requirement is to prevent taker execution, inspect the actual maker-only instruction. Coinbase Advanced's order-type guidance says its post-only order is rejected if any portion would execute immediately on arrival. That changes whether this example could execute at all. It does not retrospectively reclassify A and B. The post-only and time-in-force guide develops those permissions and their tradeoffs.
For a comparison with onchain execution, use an equivalent completed intention and explicit cost categories. DEX swap deadlines and slippage tolerance explain transaction constraints that are separate from this order-book fee split. MEV sandwich risk adds a transaction-ordering consideration to that comparison. A low commission percentage alone cannot establish the better total execution outcome.
For the next mixed order, export the individual fills and reproduce the quantity, notional and native-asset fee totals. Close the record only when those totals and the remainder have an explained account outcome. That gives a reusable answer to “why was this fee charged?” instead of another estimate based on the limit-order label.
