The flow visualization is one of the more dense pieces of BulkSheet Pro. On first look it's a colorful diagram with bands of varying thickness flowing left to right. On the second look it tells you exactly how every keyword and placement in your account ended up where it ended up.
The whole thing is built around one idea: each entity (a keyword, a placement) makes its way through three sequential decisions during a rec cycle, and the Sankey shows you the volume of entities that made each decision. Understanding the three decisions is most of what you need.
The first decision: filtering
The leftmost column of the Sankey shows four buckets — every keyword and placement in your account falls into exactly one of them.
Excluded is the smallest bucket for most accounts. It contains entities from campaigns that are explicitly excluded from optimization (via a campaign rule with the "Exclude" action). These entities never reach the rec engine at all. The Sankey shows them so you can see at a glance how much of your account you've walled off from the engine — useful if you're exploring whether an exclusion rule is too broad.
On Target contains entities whose ACoS is within ±5% of their resolved target. They're working. Whatever bid and placement settings they have right now are producing the result you wanted, so the engine doesn't need to act. The 5% band is BulkSheet Pro's deadband — close-enough-to-target gets no recommendation even though there's technically a small gap.
Insufficient contains entities that the engine didn't have enough data to evaluate confidently. Either the click count is below the reliability floor (10 for keywords, 20 for placements), or there's no ACoS data at all, or the entity is paused, or the orders count is below the placement validity gate (2 for placements). These aren't ignored permanently — they may be insufficient this cycle and actionable next cycle as more data accumulates.
Actionable is the bucket that flows forward into the rest of the diagram. These are the entities with a bid or placement rec attached. The thickness of the actionable band at the left edge tells you how much of your account the engine is recommending changes for this cycle.
For most accounts, the actionable band is the smallest of the four. On Target is usually the largest (most of your account is working). Insufficient is usually second-largest (lots of long-tail data hasn't accumulated yet). Excluded is small or zero. A healthy account looks like this — the engine is moving a small percentage of your entities each cycle and leaving the rest alone.
The second decision: routing
The middle column splits the actionable band into the lever each campaign got routed to. This is where the diagnostic gate's output shows up.
Bid Only contains entities where the gate routed the campaign to the bid lever. Either bid had the bigger gap from target, or the gate tied and the default tiebreaker (bid wins) applied, or one of the safety rules forced bid. These entities get a bid recommendation; the campaign's placements are suppressed this cycle.
Place Only contains entities where the gate routed the campaign to the placement lever. Placement had the bigger gap from target, or the worst-imbalance signal flipped a tied case to placement. These entities get a placement recommendation; the campaign's keyword bids are suppressed.
Both — bid side and Both — placement side are the dual-fire case (Sankey colors them slightly differently to distinguish the two sides of the dual-fire). These appear when a multi-keyword campaign has a clearly bad placement and the gate decided to fire both levers. The nudges are scaled to 0.5 on each side. Most accounts see very little flow through these bands — the dual-fire case is specifically triggered and not the default.
The thickness of each band at the routing column tells you the gate's distribution of decisions across your account. For most accounts, the bid-only band is wider than the placement-only band because keyword bid issues are more common than placement allocation issues. The dual-fire bands are usually thin.
The third decision: projection
The rightmost column splits the routed flows by what happened after the projection layer applied your queued negates. This is the most subtle part of the visualization and only relevant when you've actually staged negates this cycle.
Unchanged means the rec is the same as it was before negates were applied. The negate didn't touch the metrics for this keyword or placement.
Softened means the rec is smaller after the negate. The negated search terms were contributing some of the waste that drove the original rec; with them removed, the math says the move should be less aggressive.
Dissolved means the rec went away entirely. The negated terms were enough of the issue that, with them gone, the entity is now on-target or insufficient. The recommendation that existed before is no longer needed.
Placement Dissolved and Placement Changed are placement-side equivalents. A placement rec can dissolve or change in magnitude when negates clean up the underlying data.
Newly Appeared is the rare case where applying negates causes a new rec to appear that wasn't there before. This happens when the negate flips the balance — for example, a keyword that looked unprofitable before the negate now looks profitable enough to support a bid raise, so a new "up" rec appears.
If you haven't staged any negates this cycle, the projection column is mostly "unchanged" — there's nothing for the projection layer to act on, so every rec passes through untouched. Once you stage negates from the Rec Actions tab, the projection column starts to show softened, dissolved, and (occasionally) appeared bands.
What the colors mean
BulkSheet Pro uses three primary colors in the Sankey to make the routing legible at a glance:
- Blue for bid-related flows
- Amber for placement-related flows
- A different shade of amber (burnt) for the placement side of the dual-fire case
Excluded, On Target, and Insufficient use neutral grays since they don't route to a lever. The actionable band picks up the lever colors as it flows through routing.
This is why the Sankey can communicate a lot at a glance. If your diagram has thick amber bands, your account is heavy on placement-allocation issues this cycle. If it's heavy on blue, your campaigns are mostly mispricing problems. If you see a notable burnt-amber band, the dual-fire case is firing meaningfully — which usually means at least one campaign has both clearly bad placement allocation and meaningful keyword bid drift.
What the Sankey is for, in practice
Most cycles you'll glance at the Sankey and confirm that the proportions look right. Big On Target band, modest Actionable band, mostly Bid Only routing, mostly Unchanged in the projection column when you haven't staged anything yet. That's a healthy account in steady state. The Sankey is doing its job by telling you, in one picture, that the engine found mostly the kinds of issues you'd expect.
The cycles when the Sankey is most useful are the unusual ones. A larger-than-usual Actionable band can indicate a meaningful drift in your account between cycles — maybe an external change (Amazon's algorithm shifted, your competitor's pricing changed, a holiday is approaching) is showing up as more recs to make. A large Excluded band might mean your exclusion rules have grown to cover too much of the account and the engine isn't being given enough data to learn from. A heavy Insufficient band might mean your campaigns are bidding too low and not getting enough clicks to support evaluation.
The other moment the Sankey earns its keep is when you've staged a lot of negates. Watching the projection column shift from "all unchanged" to "many dissolved/softened" gives you immediate feedback that the negates are cleaning up the data and changing the recommendations downstream. It's the visual proof that the projection layer is doing its job.
What BulkSheet Pro won't do
It won't animate the changes live as you stage negates. The Sankey is a snapshot — it reflects the rec engine's analysis at the moment of generation, which is when you click Analyze or Re-analyze. Staging additional negates after that point updates the underlying recommendations but doesn't redraw the Sankey until the next analysis run. This is intentional — the Sankey is meant to be a stable reference for the cycle, not a constantly-shifting picture.
It won't show search term, harvest, term-conflict, or product-pause flows. These are recommendations too, but they don't route through the bid-vs-placement gate. The Sankey is specifically about the bid and placement decisions. The other tiles count their picks on their own.
It won't dive into per-campaign detail. The Sankey aggregates across your whole account. To see which specific campaigns drove a particular band, you'll need the per-page views (Keywords, Placements, etc.) where individual rec rows are visible.
When to stop looking at it
Honestly, most users will look at the Sankey for ten or fifteen seconds per cycle and move on. That's the right amount. The visualization is built to be informative at a glance, not to reward deep study. After a few cycles you'll start to recognize what your account's Sankey shape looks like — and you'll notice when it changes.
That moment of noticing is when the Sankey earns its place at the top of the page.