Substitute finder
With one click on a quote, this agent finds a replacement for every line that cannot be delivered as quoted. You pick one per line and the agent swaps it into the quote, so you keep the sale.
- The quantity. It is copied from the old line. A 6-pack that replaces 10 bottles gets quantity 10.
- The price. A price you typed on the old line is not kept. The new line gets the price of this customer.
| In short | |
|---|---|
| Where you use it | On a quote in the Sales Hub, behind the Workflows button |
| Starts | With a click on the agent. You answer in the same dialog |
| Changes in Propeller | Replaces lines of the quote and saves it, after your choice |
| Uses AI | No. Fixed rules rank the replacements |
| Texts | English, Dutch or French: a setting, or the language of the button label that was clicked |
| Runs in n8n | One per click and one per answer |
| Difficulty | Medium. You check the product statuses and the stock setting |
What you get
Per line up to 3 replacements, each with the price for this customer, the difference with the current line, the stock and the reason it was chosen.

Answer 1a to take the first replacement for line 1, or 1a 2b for two lines. Yes takes the first replacement for every line. No leaves the quote as it is.
The new line takes the place of the old one, with a note that says which product it replaces. The note is part of the quote, so it is in the language of the quote, also when the agent answers you in another language. Reload the page in your browser to see it.
What you need
- An n8n account with the credential
Propeller API key. See Set up n8n. - An API key with Viewer access on Product Data and Editor access on Order Data.
- Backoffice access and the Configuration role with Owner access, to register the agent.
How it works
A line needs a replacement when its product has the status Not available, Phase out or Out of stock, cannot be ordered or has less stock than the quantity on the line.
The agent looks in four places: the Alternatives of the product, its cluster, its category and its brand. It searches as the contact of the quote, so the order lists and prices of that customer count. A replacement is always available, can be ordered and has a price for this customer.
A product you set as an Alternative comes first. See Create and edit a product.
The workflows and agents in the Agent Hub are free to use and adapt. They are examples, not supported product features. Test them in a test environment and check the results before you use them on real customers.
Install it
Install a workflow from the library explains each step.
- Import the file into n8n.
- Check that the four nodes that talk to Propeller use the credential
Propeller API key. - Open the Settings node. If you do not keep stock in Propeller, set
CHECK_STOCKtofalse. Otherwise every line looks out of stock. - Follow Register the agent in Propeller with the values below.
- Open a test quote with a line that has less stock than its quantity, click Workflows and click the agent.
| Field | Value |
|---|---|
| Trigger | Button |
| Interaction mode | Multi turn, so a colleague can answer with a choice |
| Placements | Sales Hub · Quote editor, a quote in the editor |
The agent lists the lines that need a replacement. Until you answer, nothing changes.
Make it yours
| Setting | Default | What it does |
|---|---|---|
CHECK_STOCK | true | A line with too little stock needs a replacement, and a replacement needs enough stock |
NEEDS_SUBSTITUTE_STATUSES | N, P, T | The product statuses that need a replacement: Not available, Phase out and Out of stock |
MAX_SUBSTITUTES | 3 | Suggestions per line |
MATCH_ATTRIBUTES | null | The attributes that decide whether two products are alike. With null every attribute both products have counts |
LANGUAGE | 'EN' | The language of the answers: 'EN', 'NL' or 'FR' |
ADD_LINE_NOTE | true | The new line gets a note that says which product it replaces, in the language of the quote: English, Dutch or French. A quote in another language gets the note in LANGUAGE |
LABEL_LANGUAGES | {} | The agent's button label in each language, for example { 'Find substitutes': 'EN', 'Vervangers zoeken': 'NL', 'Produits de remplacement': 'FR' }. A click on the button sends its label as the message. When the message is one of these labels, the answer is in that label's language. The rest of the conversation keeps that language. With {} the answer is always in LANGUAGE |
Limits
- The suggested price is the price for one piece. The quote works out bulk prices after the swap.
Related pages
- Quote split assistant - moves lines that cannot be sent yet to a separate quote
- Register an AI agent