FlowKit

Automating maintenance and inspection reminders for an auto shop with n8n

By Clément Lacaille (Tech-Bharat) · Published 7 September 2026 · 6 min read · how we build and test

Complete FlowKit Bundle — €269

12 ready-to-import n8n workflows, setup guide in French, 14-day guarantee

See the bundle

A garage that manages maintenance and inspection reminders from memory, or from a spreadsheet someone opens once a month, mechanically loses visits: the customer forgets, discovers the deadline has passed while driving, or goes to the competitor who reached out first. A vehicle inspection deadline in particular leaves no margin — in France, for example, no grace period applies after expiry, and driving with an expired inspection exposes the owner to a flat fine and possible vehicle immobilization (French Ministry of the Economy, official guidance on vehicle inspection) — and most countries with mandatory periodic vehicle inspection enforce similarly strict deadlines. This guide builds an n8n workflow that watches every vehicle, computes maintenance and inspection due dates, and sends a personalized reminder at the right moment — ideally with a booking slot offered directly in the message.

Why the reminder changes the return rate, not just customer comfort

A reminder that only flags a deadline stays an abstract piece of information the customer mentally defers. Peter Gollwitzer showed, in a foundational paper in the motivation literature, that turning a vague intention into a concrete plan — when, where, how — sharply increases the rate of actually following through: what he calls an implementation intention (Gollwitzer, 1999, Implementation intentions: Strong effects of simple plans, American Psychologist — see). Katy Milkman and co-authors tested this principle at scale on a population of more than 3,000 employees around flu vaccination: those who received a reminder asking them to write down a specific date and time got vaccinated noticeably more often than those who received a generic reminder (Milkman, Beshears, Choi, Laibson & Madrian, 2011, Using implementation intentions prompts to enhance influenza vaccination rates, PNAS — see). Applied to a garage, this translates into something very concrete: a reminder that offers a precise, clickable slot converts better than a reminder that merely states "your inspection is coming due."

Building the vehicle database

The workflow relies on a simple data source, in Google Sheets or Airtable depending on your habits — both have a native n8n node. One row per vehicle, with at least these columns:

Column Example Use
plate_number AB-123-CD Unique vehicle identifier
customer_name / customer_phone / customer_email Julien Marchand / +33612345678 / julien@... Contact details
last_service 2026-03-12 Date of the last shop visit
mileage_last_service 68,400 Used to estimate the next mileage-based due date
inspection_due_date 2026-10-02 Expiry date of the current inspection
last_reminder_sent (empty) Updated by the workflow, prevents duplicates

This base can be filled in manually as vehicles pass through the shop, or synced from an existing point-of-sale system via a CSV export — what matters is that inspection_due_date and last_service stay current, since the whole due-date calculation depends on them.

The complete n8n workflow

Schedule Trigger (daily at 8am, Europe/Paris timezone)
  → Google Sheets / Airtable (read all rows)
  → Code (compute days remaining before inspection and estimated service)
  → Filter (deadline at day 30, 7 or 1, and not already reminded in the last 6 days)
  → Switch (channel by urgency: email at day 30, SMS at day 7 or 1)
  → AI Agent or Set (personalize the message)
  → Gmail / Twilio (send)
  → Google Sheets / Airtable (update last_reminder_sent)

The Schedule Trigger runs once a day, early morning, in the shop's own timezone — a reminder sent at 2am because of a timezone mistake does not build customer trust.

Computing due dates with a Code node

The calculation combines two deadlines (inspection and estimated service, on a mileage or time interval): the resulting conditional logic goes beyond what a single Date & Time node handles cleanly, so a Code node is the right choice here:

const items = $input.all();
const now = DateTime.now().setZone('Europe/Paris');

return items.map(item => {
  const inspection = DateTime.fromISO(item.json.inspection_due_date);
  const daysBeforeInspection = Math.floor(inspection.diff(now, 'days').days);

  const lastService = DateTime.fromISO(item.json.last_service);
  const estimatedNextService = lastService.plus({ months: 12 });
  const daysBeforeService = Math.floor(estimatedNextService.diff(now, 'days').days);

  const lastReminder = item.json.last_reminder_sent
    ? DateTime.fromISO(item.json.last_reminder_sent)
    : null;
  const daysSinceReminder = lastReminder
    ? Math.floor(now.diff(lastReminder, 'days').days)
    : 999;

  return {
    json: {
      ...item.json,
      daysBeforeInspection,
      daysBeforeService,
      daysSinceReminder,
      deadlineType: daysBeforeInspection <= daysBeforeService ? 'inspection' : 'service',
      daysBeforeDeadline: Math.min(daysBeforeInspection, daysBeforeService),
    },
  };
});

The Filter node that follows keeps only vehicles whose daysBeforeDeadline matches a reminder threshold (30, 7 or 1) and whose daysSinceReminder exceeds 6 — that second condition is what prevents a duplicate reminder if the workflow runs on a day when the threshold hasn't changed.

Routing the channel by urgency

A Switch node then routes each vehicle by daysBeforeDeadline: email for a day-30 reminder (the marginal cost is essentially zero, and there's no urgency to use the more intrusive channel), SMS via Twilio for day-7 and day-1, where read speed genuinely matters. This is the same principle of reserving SMS for deadlines that actually count, detailed in our guide on sending SMS with n8n: not turning it into a default notification channel.

Personalizing the message and offering a slot

A template with the Set node is enough for a correct message: "Hi {{ $json.customer_name }}, the inspection for your vehicle {{ $json.plate_number }} is due on {{ $json.inspection_due_date }}." To go further, an AI Agent adapts the tone to urgency (an informational nudge at day 30, a more direct message at day 1) and can embed a dynamically generated booking link — via Cal.com or a simple Calendly link for the shop. It is precisely this clickable link, with visible slots, that turns the abstract deadline into a concrete plan in Gollwitzer's sense: the customer no longer has to find a time, they pick one already on offer.

Measuring what the reminder actually changes

Three metrics are enough to know whether the workflow delivers, logged in the same base or a dedicated tab:

  • Return rate: the share of reminders sent that lead to a shop visit before the deadline, compared to the rate observed before automation.
  • Breakdown by threshold: if most return visits come from day-1 reminders rather than day-30, that signals the early reminder is being ignored and the channel or tone at day 30 is worth reworking.
  • Delay between reminder and booking: a delay that shortens once the slot link is embedded confirms the "concrete plan" effect rather than a mere calendar coincidence.

As with any process change, let the automation run for several weeks before drawing conclusions, and avoid changing the message tone and the send channel at the same time — otherwise there is no way to know which of the two made the difference.

Pitfalls and data protection

A customer's phone number and vehicle history are personal data just like in any other automated process — the principles detailed in our guide on handling data subject requests with n8n apply: a valid legal basis (legitimate interest or consent depending on context), a limited retention period, and an opt-out mention in commercial SMS. If the garage already handles other sensitive processes, logging every reminder (recipient, channel, date) in a dedicated audit trail saves having to reconstruct the history after the fact in case of a complaint.

Three mistakes come up most often in practice:

  • Estimating service on a single criterion. A purely time-based interval (12 months) ignores actual mileage; for a mixed fleet (high-mileage commercial vehicles), combine both criteria rather than relying on just one.
  • Forgetting to update last_reminder_sent. Without this write after every successful send, the duplicate filter is useless — make sure the write node runs after a confirmed send, not before.
  • Reminding a sold vehicle or a former customer. A status column (active/inactive), filtered upstream in the workflow, prevents sending an inspection reminder to the previous owner of a resold vehicle.

In summary

The workflow comes down to an up-to-date vehicle database, a due-date calculation that combines inspection and service, channel routing by urgency, and a message that offers a slot directly rather than just information. None of this needs heavy infrastructure: Google Sheets or Airtable, a daily Schedule Trigger, and the Twilio and Gmail nodes already covered elsewhere on this blog are enough to build the full version in half a day. If you also need smart triage of the inbound mailbox for the appointment requests that come back in reply, the Inbox AI Pack (€79) provides a base you can reuse directly for that second flow.

FAQ

Frequently asked questions

Do I need a specialized garage CRM to automate these reminders?

No. A simple Google Sheet or Airtable base with one row per vehicle (plate number, customer, last visit, mileage, inspection due date) is enough to get started. n8n reads this base on a schedule; the storage tool matters less than the reliability of the due-date calculation and the send. A dedicated garage CRM becomes useful later for billing or full history, but it is not a prerequisite for this workflow.

How do I avoid sending the same customer a duplicate reminder?

Add a 'last reminder sent' (date) column to the base, updated by n8n immediately after every successful send. The workflow's filter must exclude any vehicle already reminded within the last X days, not just check the due date — that second condition is what prevents an SMS from going out twice because the Schedule Trigger runs every day.

Is SMS really necessary, or is email enough?

It depends on how close the deadline is. For a 30-day-out reminder, email is enough and costs almost nothing. For a follow-up 3 or 1 days before an inspection expires, SMS has a much higher within-the-hour read rate — reserve it for deadlines that are genuinely close, rather than using it for every reminder, which adds cost and fatigues the customer.

Can the message be personalized without calling an LLM?

Yes, a simple template with interpolated fields (first name, model, due date) works well and costs zero API calls. AI adds real value when the tone needs to vary by context (a friendly nudge at day 30 vs. a more direct message at day 1) or when the message needs to weave in variable information like the vehicle's service history — otherwise a standard n8n template with the Set node is enough.

Complete FlowKit Bundle

€269