← Back to home

Integration · Zapier

Wire DirtFleet into 6,000+ apps — no code.

DirtFleet's webhook events plug straight into Zapier's HTTP-trigger model. Pick a trigger, pick an action in any Zapier-supported tool (Slack, QuickBooks, Google Sheets, Twilio, ...), drop in a few field mappings — done in minutes.

How it works

Webhooks → Zapier Catch Hook → any of 6,000 apps.

  1. 1. Create a Zap with a Webhooks by Zapier trigger. Pick "Catch Hook" — Zapier gives you a unique URL.
  2. 2. Register that URL as a DirtFleet subscription. In-app: /settings → Webhooks → New. Pick the events you want. Save and grab the signing secret (shown once).
  3. 3. Wire the rest of the Zap. Add an action step targeting whatever tool you want — Slack, QuickBooks, Google Sheets, etc. Map fields from the trigger payload to the action's inputs.
  4. 4. (Optional) Signature verification. If you want Zapier to verify the HMAC signature before running the Zap, add a JavaScript code step that recomputes the signature with your secret and rejects if mismatched. For most low-stakes channels (Slack notifications, spreadsheet rows) the obscurity of the URL itself is sufficient.

Triggers

The twelve tool / fleet webhook events Zapier can react to.

  • flag.created

    When a flag is raised

    Driver or AUTO_PM raised a YELLOW or RED flag against an asset. Payload includes asset nickname, severity, note, photo URL, who raised it.

  • flag.resolved

    When a flag is resolved

    Flag closed out. Payload includes resolution note and who resolved it.

  • workorder.completed

    When a work order is completed

    Work order flipped to DONE. Payload includes WO number, total labor hours, total cost, completion timestamp.

  • hours.logged

    When meter hours are logged

    Driver or device submitted a new HoursLog. Payload includes asset id, new reading, delta from previous reading.

  • asset.created

    When an asset is added to the fleet

    New Asset row. Payload includes assetClass and meter type.

  • tool.failure

    When a tool is reported broken

    Tool status changed to BROKEN. Payload includes tool name, category, who reported it, optional notes.

  • tool.checked_out

    When a tool is checked out

    Tool moved to a user, vehicle, or linked-asset checkout. Payload includes toUserId, toVehicleId, optional linkedAssetId, the eventId of the underlying CHECK_OUT row.

  • tool.checked_in

    When a tool is checked back in

    Tool returned. Payload includes the observed condition (GOOD / NEEDS_ATTENTION / BROKEN), the resulting Tool.status, and the auto-spawned workOrderId when condition is BROKEN.

  • tool.low_stock

    When a consumable just crossed under its reorder threshold

    A POST /tools/{id}/adjust-stock call dropped the stockLevel below COALESCE(minStockLevel, 5) for the first time. Payload includes previousStockLevel, newStockLevel, the row-level minStockLevel (or null for the org-wide fallback), and the effective thresholdUsed. Only the crossing fires — going further below or restocking does not retrigger.

  • tool.assignment_changed

    When a tool gets reassigned (user / vehicle / yard / kit)

    A PATCH /tools/{id} call moved assignedUserId, assignedVehicleId, assignedYardId, or parentKitId. Payload includes a changes array enumerating each kind that moved in the same PATCH (one delivery per PATCH, even if multiple fields changed) plus the actorId who initiated it. Mirrors the internal ASSIGNMENT ToolEvent audit feed.

  • tool.serviced

    When a PM service is recorded on a tool

    A POST /tools/{id}/mark-serviced call updated lastServicedAt. Payload includes previousLastServicedAt (null on first service), newLastServicedAt, the pmIntervalDays in effect at service time, the actorId, and any free-form note. Mirrors the internal pm_serviced: AUDIT ToolEvent.

  • tool.created

    When a new tool is created (single or bulk)

    A POST /tools or POST /tools/batch entry created a new Tool. Bulk imports emit one delivery per row. Payload includes toolId, name, category, isConsumable, scanToken (so receivers can immediately render the QR/NFC label), optional purchaseCost (useful to prime asset depreciation), and the actorId (null on bulk-import paths).

Ready-to-copy

Six prebuilt zap templates.

Pick one that matches your workflow and recreate it in Zapier with these field mappings. Total setup time per template: under 5 minutes.

  1. Red flag → Slack channel

    Post a message to your shop's #flags Slack channel every time a RED flag fires. Includes asset name and the photo if one was attached.

    Trigger
    flag.created (filter: severity = RED)
    Action
    Slack: Send Channel Message
    Field mappings
    • Channel: "#flags"
    • Message: "{{asset_nickname}} just got flagged RED — {{note}}"
    • Attachment: {{photo_url}} (if present)
  2. Completed WO → QuickBooks Online expense

    When the shop closes a work order, create a corresponding expense entry in QuickBooks under the asset's project P&L category.

    Trigger
    workorder.completed
    Action
    QuickBooks Online: Create Expense
    Field mappings
    • Vendor: DirtFleet (or the parts supplier from the repair log)
    • Amount: {{cost}}
    • Memo: "WO #{{number}} on {{asset_nickname}}"
    • Category: {{project_id}} → mapped to your QBO class
  3. Hours log → Google Sheets row

    Append every hours log to a shared Google Sheet — the finance team's backup ledger that runs alongside DirtFleet's own export.

    Trigger
    hours.logged
    Action
    Google Sheets: Create Spreadsheet Row
    Field mappings
    • Spreadsheet: shop-hours-2026
    • Row: [loggedAt, asset_nickname, hours_reading, delta, logged_by]
  4. Urgent WO → SMS to on-call mechanic

    Page the on-call mechanic by SMS when a URGENT work order is created. Uses your existing on-call rotation in Pagerduty or Twilio.

    Trigger
    workorder.created (filter: priority = URGENT)
    Action
    Twilio: Send SMS
    Field mappings
    • To: lookup from on-call rotation
    • Message: "URGENT WO #{{number}}: {{title}} — {{asset_nickname}}"
  5. Tool failure → Maintenance Slack

    Notify the tools-and-equipment Slack channel when a power tool gets reported BROKEN — so the next crew using it knows before they pack the truck.

    Trigger
    tool.failure
    Action
    Slack: Send Channel Message
    Field mappings
    • Channel: "#tools"
    • Message: "{{name}} ({{category}}) reported broken by {{reporter_name}}. {{notes}}"
  6. New asset → CMMS sync

    Mirror new assets into your secondary CMMS or spare-parts inventory system so the records stay in lockstep.

    Trigger
    asset.created
    Action
    Your CMMS API / generic Webhook
    Field mappings
    • Body: { id, nickname, assetClass, meterType, vin, serial }
  7. Tool checked out → log to job sheet

    Append every tool checkout to the row in a job spreadsheet so finance can attribute equipment usage to the right project. Pairs naturally with the linkedAssetId field on the payload.

    Trigger
    tool.checked_out
    Action
    Google Sheets: Create Spreadsheet Row
    Field mappings
    • Spreadsheet: job-tool-attribution-2026
    • Row: [occurredAt, tool_name, toUser_name, linked_asset, note]
  8. Low stock → reorder via supplier portal

    When a consumable crosses its reorder threshold, POST to your supplier's purchase-request endpoint (Grainger, Fastenal, Amazon Business) so the box ships before the drill bits run out. Pair the webhook with the supplier field on the Tool to route the right SKU.

    Trigger
    tool.low_stock
    Action
    Webhooks by Zapier: POST
    Field mappings
    • URL: https://your-supplier.example/orders (or Slack)
    • Body: { "tool_id": "{{toolId}}", "sku": "{{tool.serial}}", "current_qty": "{{newStockLevel}}", "reorder_to": "{{thresholdUsed * 4}}" }
  9. Tool reassigned → mirror to accounting / HR ledger

    Every time tool ownership moves (user / vehicle / yard / kit), POST the change to your accounting or HR system so the parallel asset register stays in lockstep with DirtFleet — no nightly reconciliation job needed.

    Trigger
    tool.assignment_changed
    Action
    Webhooks by Zapier: POST
    Field mappings
    • URL: https://your-erp.example/tool-transfers
    • Body: { "tool_id": "{{toolId}}", "actor_id": "{{actorId}}", "changes": {{changes}}, "at": "{{at}}" }
  10. PM service → mirror to asset depreciation system

    Every time a mechanic marks a tool serviced, push the event to your depreciation / warranty system so service history stays in lockstep without nightly reconciliation. Use the pmIntervalDays field to compute the next due date.

    Trigger
    tool.serviced
    Action
    Webhooks by Zapier: POST
    Field mappings
    • URL: https://your-cmms.example/service-history
    • Body: { "tool_id": "{{toolId}}", "serviced_at": "{{newLastServicedAt}}", "previous": "{{previousLastServicedAt}}", "interval_days": "{{pmIntervalDays}}", "note": "{{note}}" }
  11. New tool created → seed accounting / asset register

    When a tool is created (single or bulk import), push it into your accounting or asset-register system so the new row exists before its first checkout/depreciation event arrives. The scanToken in the payload lets you immediately render and print the QR/NFC label.

    Trigger
    tool.created
    Action
    Webhooks by Zapier: POST
    Field mappings
    • URL: https://your-erp.example/assets
    • Body: { "tool_id": "{{toolId}}", "name": "{{name}}", "category": "{{category}}", "purchase_cost": "{{purchaseCost}}", "scan_token": "{{scanToken}}", "created_by": "{{actorId}}", "created_at": "{{at}}" }

Beyond Zapier

Native API integration

Zapier is the no-code path. For tighter integration the public REST API at /docs/api gives you typed access to every resource (assets, hours, flags, work orders, tools, projects, yards, webhooks). OpenAPI spec at /openapi.yaml; AsyncAPI spec at /asyncapi.yaml for the webhook side. Codegen guides at /docs/api/sdk.

Need a template that isn't here? Email support@dirtfleet.app — if it's a common ask we'll write it up and add it to this page.