Why Your CoW Swap Limit Order Hasn't Filled Yet (and What to Do)
You set your price. You closed the tab. You came back three days later expecting a filled order and a small dopamine hit - and instead you're staring at the same open order, patiently waiting, like a text message left on read.
Before you assume something's broken: it probably isn't. CoW Swap limit orders don't work quite like the limit orders you're used to on a centralized exchange, and that difference is usually why it hasn't filled. Here's what's actually going on, and what you can do about it.
A quick refresher on how CoW Swap limit orders work
When you place a limit order on CoW Swap, you're not sending a transaction - you're signing an intent: "I want to sell X for at least Y." That intent goes into a batch with everyone else's orders, and independent solvers compete to find the best way to execute the whole batch. The solver that generates the most value for the batch wins, and it settles everyone's orders on-chain in one go.
This is why placing and cancelling limit orders on CoW Swap costs no gas - you're not touching the chain until a solver actually executes your order. It's also why your order isn't guaranteed to fire the instant the market touches your number. Execution depends on a solver finding a valid, worthwhile settlement for it in that particular auction round. So if it hasn't filled, it's usually one of five things.
1. The price genuinely hasn't reached your limit.
The most boring explanation is usually the right one. Check the market price against the price you set. This is worth stating because CoW Swap's limit orders are actually stricter in your favour than most: if the market moves past your limit price, you get that better price, not just your stated limit. So it's never firing early - it fires at your price or better.
2. The price has reached your limit - but not by enough to cover network fees.
This one trips people up because it's specific to how CoW Protocol prices limit orders. There's no upfront fee for placing a limit order. Instead, the protocol waits until the market price clears both your limit price and the network cost of settling the trade, then takes the fee out of that margin. So you can watch the spot price tick past your limit and still see nothing happen - because there isn't yet enough room above your limit to also cover gas.
The open orders panel actually shows you this directly: check the "Executes At" column next to your order. That's the real price your order needs to hit, fees included, and the little traffic-light indicator gives you a rough sense of how close you are.
3. It's partially filled - and the rest is dust.
By default, CoW Swap limit orders are partially fillable, which means they can fill gradually as liquidity shows up rather than needing to fill all at once. That's usually a good thing: partial fills tend to complete faster and at better prices than all-or-nothing orders.
But it means you might look at your order and see it's 94% filled with a small remainder sitting there - and if that remainder is small relative to the network fee needed to settle it, a solver may not bother executing it. The result is a tiny leftover balance in your wallet instead of a fully closed order. If you'd rather avoid this entirely, you can switch to fill-or-kill in the swap panel settings - you'll trade some fill speed and price for an all-or-nothing outcome.
4. It expired.
Every limit order has an expiration date you set when you placed it. If the market never reached your price (with enough margin for fees) before that deadline, the order simply expires unfilled - no drama, no gas spent, nothing lost. Worth a glance at your open orders to check it hasn't quietly timed out.
5. No solver found a viable settlement for it in that auction.
Less common, but worth knowing: solvers only execute orders they can settle profitably within a batch. For very illiquid pairs or unusual amounts, there may be auctions where no solver puts together a solution that includes your order - even if your price is technically reachable on paper. This tends to resolve itself as liquidity conditions shift, but it's more likely to bite on thinly traded tokens.
What to do about it
- Check "Executes At." This is the single most useful number on the page - it tells you the real price your order needs, fees and all.
- Widen your limit price slightly, if your strategy allows it, so there's more room to clear the fee threshold.
- Extend the order duration if it's close to expiring and the market's trending your way.
- Switch fill settings - toggle off partial fills if you want all-or-nothing, or leave them on if you're optimizing for speed and price.
- For illiquid pairs, be patient or resize. A smaller order or a more liquid route can make it easier for solvers to find a settlement.
- Cancel and re-quote if your thesis has changed. Cancellation is free and off-chain, so there's no cost to resetting.
None of this means the order is stuck or the protocol has failed you - it means CoW Swap is doing exactly what it's designed to do: refusing to execute your trade for anything worse than what you asked for, fees included. That patience is the trade-off for the protection.