Build a New Sales Rep Onboarding — Auto Welcome + 30-60-90 Plan Workflow with n8n
A new sales rep costs you money from day one and produces nothing for weeks. The gap between "signed the offer" and "closing deals" is where onboarding lives — and for most teams it's a mess of half-f
A new sales rep costs you money from day one and produces nothing for weeks. The gap between "signed the offer" and "closing deals" is where onboarding lives — and for most teams it's a mess of half-finished Notion docs, a Slack intro that never happened, and a manager scrambling to write a 30-60-90 plan the night before the rep starts. This article shows you how to collapse that entire first-day scramble into a single n8n workflow that fires the moment a rep is added to your system: welcome email out, 30-60-90 plan delivered, Slack announcement posted, CRM profile created, and the rep logged in your onboarding tracker — automatically, every time, identically.
The Problem: Onboarding Is Manual, Inconsistent, and Slow
Sales onboarding is one of the highest-leverage processes in a company and one of the worst-run. The reasons are structural, not lazy:
- It's infrequent enough to never get systematized. You hire a rep every few weeks, so nobody builds a repeatable machine. Each hire gets a bespoke, improvised experience.
- It's owned by people who are busy closing. The sales manager running onboarding is also carrying a quota. Onboarding tasks get deprioritized behind live deals — every single time.
- It spans five tools that don't talk to each other. Email, Slack, your CRM (HubSpot, Pipedrive, Salesforce), a knowledge base, and a project tracker. Nobody wires them together for a once-a-month event.
The cost is real and measurable. Reps who get a structured 30-60-90 plan ramp faster and churn less. Reps who get a chaotic first week form their first impression of your operational maturity — and it's a bad one. Every day of delayed ramp is a day of salary against zero pipeline. When onboarding is manual, it's also inconsistent: rep #4 gets a great plan because the manager had a slow week, rep #5 gets nothing because Q-end hit. That inconsistency is invisible until you look at ramp times side by side and see a three-month spread on identical roles.
The Solution: One Trigger, Five Actions, Zero Manual Steps
The fix is to treat "a new sales rep exists" as an event — and attach every onboarding action to that event so they fire together, in order, without anyone remembering to do them. n8n is ideal for this because it's the glue layer between your HR system, your CRM, Slack, and email, and it runs the same sequence identically for every hire.
Here's the flow this template implements. A new rep is added — via a form, an HR tool, a spreadsheet row, or a webhook — and n8n immediately:
- Sends a personalized welcome email with first-day logistics, logins, and who to talk to.
- Delivers the 30-60-90 day plan, pre-filled with the rep's name, manager, and role-specific milestones.
- Announces the rep on Slack in your sales channel so the team knows who joined and can say hello.
- Creates a CRM profile so the rep is a real user/owner in HubSpot or Pipedrive before their first login.
- Adds them to the onboarding tracker so their progress through the 30-60-90 milestones is visible to their manager.
The rep's first hour goes from "wait for someone to set things up" to "everything is already waiting for you." The manager does nothing. And every rep gets the exact same high-quality start.
Step-by-Step Setup in n8n
Below is how the workflow is wired, node by node. If you're using the ready-made template, these are already configured — you just drop in credentials and channel IDs.
1. Trigger node. Start with the source of truth for new hires. The most portable option is a Webhook node — point any HR tool, Google Form, or Airtable automation at it. Alternatively, use a Google Sheets Trigger (poll on "row added" in a "New Hires" sheet) or an HR-app trigger if you use BambooHR or similar. The trigger should carry the core fields: rep_name, rep_email, role, start_date, and manager_name.
2. Set / Edit Fields node. Immediately after the trigger, add a Set node to normalize the incoming data — trim whitespace, build a first_name from the full name, and construct dynamic strings you'll reuse, like the Slack message and email subject. Doing this once here keeps every downstream node clean and expression-free.
3. Send Welcome Email. Use the Gmail node (or Send Email / SMTP, or a Microsoft Outlook node). Set the "To" to {{ $json.rep_email }}, the subject to something like Welcome to the team, {{ $json.first_name }} 🎉, and put your onboarding logistics in an HTML body. Reference the 30-60-90 plan here — either inline or as a link to the doc the next node generates.
4. Deliver the 30-60-90 plan. Two good patterns: (a) a Google Docs node that copies a template doc and replaces {{name}}, {{role}}, and milestone placeholders, then shares it with the rep; or (b) an HTML/Set node that assembles a role-specific plan (30 days = learn product + shadow calls; 60 days = own pipeline + first demos; 90 days = full quota) and attaches it to the email above. The template ships with role-based milestone blocks so a "SDR" and an "AE" get different plans automatically via an IF or Switch node on role.
5. Announce on Slack. Add a Slack node, operation Send a Message, targeting your #sales or #team channel by channel ID. Use Slack's Block Kit for a clean announcement: rep name, role, start date, a headshot if you have the URL, and a "say hi 👋" prompt. Authenticate via a Slack OAuth2 credential with chat:write scope.
6. Create the CRM profile. Use the HubSpot or Pipedrive node. For HubSpot, create the rep as an Owner/user or as a contact record flagged internal, depending on your setup; for Pipedrive, add them as a user or create a person record. Map rep_name, rep_email, and role. This ensures deals can be assigned to the rep from day one instead of after a manual invite.
7. Add to the onboarding tracker. Finish with a Notion, Airtable, or Google Sheets node that appends a row to your onboarding board: rep name, start date, manager, and a status column set to "Day 1 — Welcome sent." This row is what the manager watches to confirm the rep is progressing through each 30-60-90 milestone.
Wire the nodes in sequence and add a No Operation / merge or leave them chained; for resilience, enable "Continue On Fail" on the Slack and CRM nodes so a single API hiccup doesn't block the rest. Add an Error Trigger workflow that pings your ops channel if any step fails — you want to know instantly, not discover it when the rep asks where their plan is.
The Benefits: Consistency, Speed, and Visibility
Once this is live, three things change:
- Every rep gets an identical, excellent start. No more "it depends who onboarded you." The best version of your onboarding runs every time, automatically.
- Time-to-first-action drops to zero. The welcome, the plan, the intro, and the CRM setup all exist before the rep's first login. Managers reclaim the hours they used to spend copy-pasting docs.
- Progress is visible and measurable. Because every hire lands in the same tracker with the same milestones, you can finally compare ramp times, spot reps who are behind at day 30, and improve the plan with data instead of anecdotes.
For a growing team, this compounds: the tenth hire is as smooth as the first, and you never rebuild the process.
Common Pitfalls to Avoid
Firing on the wrong trigger. If your trigger is "offer accepted" but the rep starts in three weeks, don't send the Day 1 email immediately. Add a Wait node or a Schedule gate keyed to start_date so timing matches reality.
No deduplication. A flaky HR webhook can fire twice. Add an IF check against your tracker (or a Google Sheets lookup on rep_email) before creating records, so you don't double-post to Slack or create duplicate CRM profiles.
Hardcoding channel IDs and manager names. Keep these in the Set node or in n8n environment variables, not scattered across nodes. When your Slack channel or CRM changes, you update one place.
Skipping error handling. Without an Error Trigger, a silent Slack-auth failure means the rep is never announced and nobody notices. Always route failures to a monitored channel.
Over-personalizing the plan by hand. The temptation is to "just tweak this one plan." Resist it — put role logic in the Switch node so personalization stays automated. The moment you edit plans manually, you've reintroduced the inconsistency you built this to kill.
Start with the webhook trigger, the welcome email, and the Slack announcement — that alone eliminates the worst of the first-day chaos. Then layer in the 30-60-90 doc generation, CRM creation, and tracker once the core flow is proven. Within a few hires you'll wonder how you ever onboarded reps by hand.
Ja construimos isso pra voce
Nao comece do zero. O New Sales Rep Onboarding — Auto Welcome + 30-60-90 Plan e um workflow n8n pronto para instalar — conecta suas ferramentas em minutos, sem codigo.
Instalar por $149 →