Create Todoist tasks for HubSpot deal stage changes

When a HubSpot deal moves stages, Geni drafts the right next step and adds it to your Todoist Sales project, with the deal link and a due date built in.

Agentic Task
HubSpotTodoistSalesPersonal ProductivityNotifications & AlertsData Sync

Build an agent workflow that turns HubSpot deal stage changes into Todoist next-step tasks. This is a direct replacement for HubSpot's native Todoist integration, which is being deprecated.

Trigger: an incoming webhook from a HubSpot workflow that fires when a deal's stage changes. The payload includes the deal's object ID, the new stage, and (when available) the previous stage and the HubSpot portal ID.

When the webhook fires, the agent should:

1. Look at the new stage. If it is closed-won, closed-lost, or any stage in my configured list of terminal stages, exit immediately without creating a task. Make the terminal-stage list editable in the workflow settings.

2. Call HubSpot Get Deal for the deal ID in the webhook payload. Request these properties at minimum: dealname, dealstage, pipeline, amount, closedate, hubspot_owner_id. Also include the associated contacts so we can find the primary contact.

3. Call HubSpot Get Contact for the primary associated contact and read firstname, lastname, and email.

4. Based on the new stage, draft the right next-step task. Use these defaults and let me edit the template per stage in settings:

- qualifiedtobuy: "Schedule discovery call with {contact name} for {deal name}"

- presentationscheduled: "Prep demo deck for {contact name} on {deal name}"

- decisionmakerboughtin: "Confirm decision criteria with {contact name} for {deal name}"

- contractsent: "Send mutual close plan to {contact name} for {deal name}"

- appointmentscheduled (proposal-sent equivalent): "Send pricing PDF to {contact name} for {deal name}"

For any other non-terminal stage, the agent should write a sensible next step that matches the stage's name and the typical sales motion for that stage.

5. Call Todoist Create Task to add the task to my Sales project (let me change the project name in settings). The task should have:

- content: the drafted next-step line with the deal name and primary contact name

- description: a one-line link back to the HubSpot deal at https://app.hubspot.com/contacts/{portalId}/deal/{dealId} plus the deal amount and close date for quick context

- due_date: two business days from now, skipping Saturday and Sunday. Make the day offset configurable.

- labels: a single label matching the new stage (use the stage's internal name, lower-kebab-case)

If the Sales project does not exist in Todoist, surface a clear error telling me to create it or change the project name in settings. If the deal has no associated contact, still create the task using just the deal name and skip the contact placeholder.

Settings I want to control: the Todoist project name, the list of terminal stage names to skip, the per-stage task template, and the due-date offset in business days.

Additional information

What does this prompt do?
  • The moment a HubSpot deal moves to a new pipeline stage, a task lands in your Todoist Sales project with the right next step for that stage.
  • Each task is pre-written with the deal name, the primary contact, a link back to the HubSpot deal, a label matching the new stage, and a due date two business days out.
  • Closed-won, closed-lost, and any other terminal stages you list are skipped, so Todoist only fills up with work that actually needs doing.
  • A direct replacement for HubSpot's native Todoist integration, which is being deprecated.
What do I need to use this?
  • A HubSpot account with access to deals and the ability to send a webhook from a workflow when a deal stage changes.
  • A Todoist account and a project where you want the tasks to land. We default to a project called Sales.
How can I customize it?
  • Change the Todoist project, or send tasks to different projects based on which pipeline the deal is in.
  • Edit the next-step template for each stage so the task content matches the language of your sales motion.
  • Adjust the due-date offset. The default is two business days out, but you can use any number of days or skip weekends differently.
  • Add or remove terminal stages so closed deals, paused deals, or any custom on-hold stage stays out of Todoist.

Frequently asked questions

Does this replace HubSpot's built-in Todoist integration?
Yes. HubSpot is sunsetting its native Todoist workflow action, and this covers the same job of turning stage changes into Todoist tasks. You also get full control over the task content, the due date, and which stages should be skipped.
Will this work on a HubSpot free plan?
Deal stage webhooks live inside HubSpot Workflows, which requires a paid Sales, Marketing, or Operations Hub tier. If you are on free, you can still run a near-equivalent version by polling for recent deal changes on a schedule instead of using a webhook.
Which stages get skipped?
Closed-won and closed-lost by default. You can add any other stage you treat as terminal, like a nurture or on-hold stage, and the workflow will exit without creating a task.
Where do the tasks land in Todoist?
In a project called Sales by default. You can point it at any project you own or share with your team.
How does the contact get attached?
Geni reads the primary contact associated with the deal in HubSpot, then puts the contact name in the task content alongside the deal name so the follow-up is always clearly addressed.

Stop manually writing sales follow-ups after every stage change.

Connect HubSpot and Todoist once, and Geni adds the right next step the moment a deal moves stages.