BambooForge Labs

Marketing Automation All in One with Lead Scoring

Marketing automation driven by lead score: crossing a threshold enrols a lead, removes it, or moves it to another branch, with a reason logged.

Buy on the Odoo Apps StoreOpen the live demoMarketing€287Community & Enterprise

Available for Odoo 16.0, Odoo 17.0, Odoo 18.0, Odoo 19.0, Odoo 20.0. Technical name bambooforge_ma_scoring.

Odoo 16.0Odoo 17.0Odoo 18.0Odoo 19.0Odoo 20.0
Screens and walkthrough for
Transcript of the walkthrough (Odoo 20)

Marketing Automation All in One with Lead Scoring. Marketing automation driven by lead score: crossing a threshold enrols a lead, removes it, or moves it to another branch, with a reason logged. Said before you buy, because it is the half that decides whether the app fits: In the next few minutes: marketing automation all in one with lead scoring, then triggers, then crossings, not levels, then when it runs, then the log. Then what this app deliberately does not do, so you can tell before you buy whether it fits.

Everything lives under Score events. 1. Copy bambooforge_ma_scoring into your addons path and update the app list, or install the ZIP from the Odoo Apps Store. 2.

Install Marketing Automation Suite: Lead Score Journeys. 3. Open Score events. Marketing Automation All in One with Lead Scoring.

An add-on for BambooForge Lead Scoring and BambooForge Marketing Automation (17.0). A lead score that crosses a line moves the lead: into a journey, out of one, or onto another branch - with a log that says why. Triggers. On a journey whose audience is Leads/Opportunities, a Score triggers tab.

Each trigger is one line and one action: Score reaches N - fires when the score goes from below N to N or above. Score drops below N - fires when the score goes from N or above to below N. Grade becomes X - fires when the grade changes to X. Enrol in this journey - the lead joins at the first step.

Remove from this journey - the running participant is exited. Move to step - the running participant is put on the chosen step (due after that step's delay). A lead not yet in the journey is enrolled first. This is how a lead that goes Hot jumps to the fast-track branch of the same journey.

Once per lead (default on) - fire once per lead, ever. Off: every time the line is crossed. Enrol again - enrol a lead who already finished or left this journey. Off: only leads never in the journey are enrolled (unless the journey itself allows rejoin and the lead is still running).

Crossings, not levels. Every lead remembers the score and grade the triggers last saw. A trigger fires on the crossing between last seen and now - a lead sitting at 80 does not re-enter reaches 50 every ten minutes. A lead seen for the first time can reach a line and can become a grade, but can never drop below one: a brand-new lead at 0 does not "drop below 10" on its first day.

When it runs A cron every 10 minutes, on the leads whose score or grade moved since last seen - found with one SQL pass, not a scan of the table. Evaluate now on the journey's triggers tab. Evaluate score triggers on a lead (for the rep who does not want to wait). The log.

Marketing Automation ▸ Score events: one row per firing - lead, journey, trigger, score before and after, grade before and after, the action, the participant, and a note (enrolled, moved to 'Fast track', not enrolled: already finished or left, …). The lead shows Journeys and Score events buttons; the journey shows Score events; each trigger shows how often it fired. A failing trigger never stops the others: the error is logged, the event is not written, and the lead stays a candidate for the next run. Technical notes Uses Marketing Automation 1.9.0's _enroll_records(records, rejoin=) and the participant's _schedule(step); Lead Scoring's stored lead_score / lead_grade_id.

Nothing is copied. Three fields on crm.lead: score seen, grade seen, evaluated. Community only. No Enterprise module, no external service.

How we make sure it works. Before every release, 20 automated checks run against this app on Odoo 16, 17, 18, 19 and 20. Among them: Without rejoin a finished lead is not enrolled again. Enrol on a running lead is a no op with a note.

Jump on a lead not in the journey enrols first. Threshold equal to the score is reached not dropped. A stopped journey fires nothing but marks seen. The complete list is in the source you receive.

Questions people ask. Which Odoo versions does it run on? Odoo 16.0, 17.0, 18.0, 19.0, 20.0, on the series you buy it for; each series is its own listing. Community or Enterprise?

Both. It needs no Enterprise app. The complete manual is at docs dot bambooforge dot dev, the demo database is linked from the store page, and support answers within twenty-four hours. Links are in the description.

Events - bambooforge_ma_scoring
Events
Lead - bambooforge_ma_scoring
Lead
Triggers - bambooforge_ma_scoring
Triggers

Key facts

What it is
Marketing automation driven by lead score: crossing a threshold enrols a lead, removes it, or moves it to another branch, with a reason logged.
For
Marketing
Odoo versions
16.0, 17.0, 18.0, 19.0, 20.0 - Community and Enterprise
Runs on
Odoo.sh or Odoo you host yourself - not Odoo Online, which accepts no third-party apps
Price
287 EUR, one-time, on the Odoo Apps Store
Technical name
bambooforge_ma_scoring
Not for
Said before you buy, because it is the half that decides whether the app fits:; Re-enter a lead sitting on a line every run: triggers fire on the crossing between last seen and now.; Let a brand-new lead drop below a line on its first day.
Manual
https://docs.bambooforge.dev/bambooforge_ma_scoring/
Live demo
https://demo20.bambooforge.dev/odoo/action-bambooforge_ma_scoring.action_bf_journey_score_event
Store page
https://apps.odoo.com/apps/modules/20.0/bambooforge_ma_scoring
Manual last updated
2026-10-15

Marketing Automation All in One with Lead Scoring

An add-on for BambooForge Lead Scoring and BambooForge Marketing Automation (17.0). A lead score that crosses a line moves the lead: into a journey, out of one, or onto another branch - with a log that says why.

Triggers

On a journey whose audience is Leads/Opportunities, a Score triggers tab. Each trigger is one line and one action:

  • Score reaches N - fires when the score goes from below N to N or above.

  • Score drops below N - fires when the score goes from N or above to below N.

  • Grade becomes X - fires when the grade changes to X.

and does one of:

  • Enrol in this journey - the lead joins at the first step.

  • Remove from this journey - the running participant is exited.

  • Move to step - the running participant is put on the chosen step (due after that step's delay). A lead not yet in the journey is enrolled first. This is how a lead that goes Hot jumps to the fast-track branch of the same journey.

Two switches per trigger:

  • Once per lead (default on) - fire once per lead, ever. Off: every time the line is crossed.

  • Enrol again - enrol a lead who already finished or left this journey. Off: only leads never in the journey are enrolled (unless the journey itself allows rejoin and the lead is still running).

Crossings, not levels

Every lead remembers the score and grade the triggers last saw. A trigger fires on the crossing between last seen and now - a lead sitting at 80 does not re-enter reaches 50 every ten minutes. A lead seen for the first time can reach a line and can become a grade, but can never drop below one: a brand-new lead at 0 does not "drop below 10" on its first day.

When it runs

  • A cron every 10 minutes, on the leads whose score or grade moved since last seen - found with one SQL pass, not a scan of the table.

  • Evaluate now on the journey's triggers tab.

  • Evaluate score triggers on a lead (for the rep who does not want to wait).

The log

Marketing Automation ▸ Score events: one row per firing - lead, journey, trigger, score before and after, grade before and after, the action, the participant, and a note (enrolled, moved to 'Fast track', not enrolled: already finished or left, …). The lead shows Journeys and Score events buttons; the journey shows Score events; each trigger shows how often it fired.

A failing trigger never stops the others: the error is logged, the event is not written, and the lead stays a candidate for the next run.

Technical notes

  • Uses Marketing Automation 1.9.0's _enroll_records(records, rejoin=) and the participant's _schedule(step); Lead Scoring's stored lead_score / lead_grade_id. Nothing is copied.

  • Three fields on crm.lead: score seen, grade seen, evaluated.

  • Community only. No Enterprise module, no external service.

How we make sure it works

Before every release, 20 automated checks run against this app on Odoo 16, 17, 18, 19 and 20. Among them:

  • Without rejoin a finished lead is not enrolled again.

  • Enrol on a running lead is a no op with a note.

  • Jump on a lead not in the journey enrols first.

  • Threshold equal to the score is reached not dropped.

  • A stopped journey fires nothing but marks seen.

The complete list is in the source you receive.

What it does not do

Said before you buy, because it is the half that decides whether the app fits:

  • Re-enter a lead sitting on a line every run: triggers fire on the crossing between last seen and now.

  • Let a brand-new lead drop below a line on its first day.

Install

  1. Copy bambooforge_ma_scoring into your addons path and update the app list, or install the ZIP from the Odoo Apps Store.

  2. Install Marketing Automation Suite: Lead Score Journeys.

  3. Open Score events.

Questions people ask

Which Odoo versions does it run on?

Odoo 16.0, 17.0, 18.0, 19.0, 20.0, on the series you buy it for; each series is its own listing.

Community or Enterprise?

Both. It needs no Enterprise app.

What does it need?

The standard Web; lead scoring, marketing automation (BambooForge) must be installed first app. No extra Python package.

Where does it show up?

Under the Score events menu.

Does anything leave my server?

No. It makes no call outside your Odoo server: no telemetry, no licence check, no third-party service.

What happens if I uninstall it?

Odoo drops the app's own tables and fields; the standard records it worked on (contacts, orders, products) stay as they are.