Recued
Menu
← Back to recipes

Where the quotes stand

by recued-core v2 8 views

Use “Where the quotes stand” in Recued. What is still out, what expires soon, what expired unanswered, and the win rate computed only over quotes you actually got an answer on.

Complete workflow

Quote Pipeline 4 pinned recipes

Use Quote Pipeline in Recued for quotes, win rate, sales, and small business. It includes 5 built-in actions and 3 ready-to-run workflows. Actions that change data use Recued's approval controls.

You are viewing one recipe in this workflow. Installing it opens the complete pack so its other recipes and background automations arrive together.

Use “Where the quotes stand” in Recued. What is still out, what expires soon, what expired unanswered, and the win rate computed only over quotes you actually got an answer on.

pack:quote-pipelinequotespipelinerecords
by recued-core pinned v2

Use “Record a quote you sent” in Recued. A quote you sent yourself — what, to whom, how much, and how long it stands. It starts undecided and counts towards no rate until you hear back.

pack:quote-pipelinequotespipelinerecords
by recued-core pinned v2

Use “Record what happened” in Recued. Won, lost or withdrawn. It uses the connections and settings you choose when you run it.

pack:quote-pipelinequotespipelinerecords
by recued-core pinned v2
View pack details, dependencies, and permissions →

The pipeline

⛔⛔ THE WIN RATE COUNTS ONLY QUOTES YOU GOT AN ANSWER ON. Three won, two lost and five still out is 60%, not 30%. Dividing by everything you ever sent buries your real rate under quotes nobody has answered yet, and a business that believes it wins 30% prices the next job as if it must — which is how a good rate becomes a bad one. Undecided is its own state; withdrawn counts in neither. With nothing answered yet the rate is , not zero.

EXPIRED IS DERIVED AT READ TIME, NEVER STORED. A quote does not change when the clock passes it, and a stored flag would need something to run to stay true. It also is NOT a loss: nobody chose you, nobody chose against you, and folding it into the loss column would quietly drag your rate down for other people's silence.

Every recorded quote lands in exactly one of five buckets — won, lost, withdrawn, live, expired — and the card says whether that held. A quote that fell out of all five would be one you sent and cannot see.

The lost-reason breakdown is the most useful thing here and the only part that needs you to have typed something. Losing on price and losing on timing are different businesses.

Nothing is chased and nothing is sent.

How it works 50 steps

Inspect the data fetches, transforms, gates, and output this recipe runs.

Process (50 steps)
now_iso date_add
Add 0 seconds to
today_parts split
Split now iso into parts
today default
Apply default
soon_iso date_add
Add setting expiring within days days to
soon_parts split
Split soon iso into parts
soon default
Apply default
all_quotes ?
rows default
Apply default
total_recorded count
Count items in rows
view map
Extract from each item
won filter
Filter by condition
lost filter
Filter by condition
withdrawn filter
Filter by condition
undecided filter
Filter by condition
live_rows ?
expired_rows ?
expiring_rows ?
live map
Extract from each item
expired map
Extract from each item
expiring_all map
Extract from each item
won_count count
Count items in won
lost_count count
Count items in lost
withdrawn_count count
Count items in withdrawn
live_count count
Count items in live
expired_count count
Count items in expired
expiring_all_count count
Count items in expiring all
expiring_count math
Calculate: {{step.expiring_all_count}} - {{step.expired_count}}
decided math
Calculate: {{step.won_count}} + {{step.lost_count}}
has_decided compare
Check if decided is greater than 0
rate_raw math
Calculate: round({{step.won_count}} * 1000 / max({{step.decided}}, 1)) / 10
win_rate ternary
Apply ternary
undecided_count count
Count items in undecided
open_split_total math
Calculate: {{step.live_count}} + {{step.expired_count}}
open_split_agrees compare
Check if open split total equals undecided count
bucket_total math
Calculate: {{step.won_count}} + {{step.lost_count}} + {{step.withdrawn_count}} + {{step.live_count}} + {{step.expired_count}}
buckets_agree compare
Check if bucket total equals total recorded
won_value_raw sum
Sum values in
won_value round
Round won value raw to 2 decimal places
out_value_raw sum
Sum values in
out_value round
Round out value raw to 2 decimal places
expired_value_raw sum
Sum values in
expired_value round
Round expired value raw to 2 decimal places
live_sorted sort
Sort by valid_until
live_table to_table
Format results as a data table
expired_sorted sort
Sort by valid_until
expired_table to_table
Format results as a data table
lost_reasons group_by
Group by lost_reason
reasons_sorted sort
Sort by count
reasons_table to_table
Format results as a data table
card to_summary
Format results as a summary card
Settings 2 configurable

Configurable at install. Defaults shown — change them anytime in Recued.

limit setting = 200
expiring within days setting = 7

About

Tags

pack:quote-pipelinequotespipelinerecordsv2

Details

50 steps 2 configurable settings recipe_id: list-quotes