Triggers
Understand the different trigger types in ThinkFleet: webhooks, schedules, and app triggers.
Triggers
A trigger is the first step of every flow. It defines the event that starts your automation. ThinkFleet supports three categories of triggers: webhooks, schedules, and app triggers.
Webhook Triggers
Webhook triggers fire when an HTTP request is sent to a unique URL generated by ThinkFleet.
Setup
- Add a Webhook trigger to your flow
- Copy the generated webhook URL
- Configure the external system to send events to this URL
Webhook URL Format
https://your-instance.thinkfleet.com/api/v1/webhooks/{flowId}
Supported Methods
Webhook triggers accept POST, GET, and PUT requests. The trigger captures:
| Field | Description |
|---|---|
body |
The request body (parsed as JSON if Content-Type is application/json) |
headers |
All request headers |
queryParams |
URL query parameters |
Example: Receiving a GitHub Webhook
Configure GitHub to send push events to your webhook URL:
{
"ref": "refs/heads/main",
"repository": {
"full_name": "myorg/myrepo"
},
"commits": [
{
"message": "Fix login bug",
"author": { "name": "Jane Doe" }
}
]
}
Access this data in subsequent steps:
{{trigger.body.repository.full_name}} → "myorg/myrepo"
{{trigger.body.commits[0].message}} → "Fix login bug"
Webhook Security
To verify that requests are genuinely from the expected source:
- Shared Secret: Many services (GitHub, Stripe) sign webhook payloads with a secret. Use a Code action to verify the signature.
- IP Allowlisting: Configure your firewall to only allow requests from known IP ranges.
- Custom Headers: Check for expected headers in a Branch action.
Webhook Response
By default, ThinkFleet responds with 200 OK immediately. If you need a custom response (e.g., for Slack challenge verification), enable Return Response in the trigger settings and configure:
- Status Code: 200, 201, etc.
- Headers: Custom response headers
- Body: Static or dynamic response body
Schedule Triggers
Schedule triggers fire on a recurring time-based schedule.
Simple Intervals
Choose from preset intervals:
| Interval | Description |
|---|---|
| Every 5 minutes | High-frequency polling |
| Every 15 minutes | Standard polling |
| Every hour | Hourly tasks |
| Every day | Daily reports, syncs |
| Every week | Weekly summaries |
| Every month | Monthly processing |
Cron Expressions
For more control, use a cron expression:
┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23)
│ │ ┌───────────── day of month (1 - 31)
│ │ │ ┌───────────── month (1 - 12)
│ │ │ │ ┌───────────── day of week (0 - 7, 0 and 7 = Sunday)
│ │ │ │ │
* * * * *
Common Cron Examples
| Cron Expression | Schedule |
|---|---|
0 9 * * 1-5 |
Every weekday at 9:00 AM |
0 */2 * * * |
Every 2 hours |
30 8 1 * * |
8:30 AM on the 1st of every month |
0 0 * * 0 |
Midnight every Sunday |
*/10 * * * * |
Every 10 minutes |
Timezone
Schedule triggers run in the timezone configured in your project settings. You can override the timezone per trigger in the advanced settings.
Schedule Trigger Output
The schedule trigger provides:
{
"scheduledTime": "2026-03-12T09:00:00.000Z",
"timezone": "America/New_York"
}
App Triggers
App triggers fire when a specific event occurs in a connected application. They are the most common trigger type for event-driven automations.
How App Triggers Work
There are two mechanisms:
Polling Triggers
ThinkFleet periodically checks the app for new data. The polling interval is configurable (default: 5 minutes for published flows).
- Pro: Works with any API, even those without webhook support
- Con: Slight delay between event and flow execution
Real-time (Webhook-based) Triggers
The app sends events directly to ThinkFleet in real time via its own webhook infrastructure.
- Pro: Near-instant execution
- Con: Requires the app to support webhooks
ThinkFleet handles the distinction automatically. You don't need to know which mechanism a trigger uses.
Popular App Triggers
Communication
| Piece | Trigger | Type |
|---|---|---|
| Gmail | New Email | Polling |
| Slack | New Message | Real-time |
| Discord | New Message | Real-time |
| Microsoft Teams | New Message | Polling |
CRM & Sales
| Piece | Trigger | Type |
|---|---|---|
| Salesforce | New Record | Real-time |
| HubSpot | New Contact | Polling |
| Pipedrive | New Deal | Polling |
Developer Tools
| Piece | Trigger | Type |
|---|---|---|
| GitHub | New Pull Request | Real-time |
| GitLab | New Merge Request | Real-time |
| Jira | Issue Updated | Real-time |
| Linear | Issue Created | Real-time |
Payments
| Piece | Trigger | Type |
|---|---|---|
| Stripe | Payment Completed | Real-time |
| PayPal | New Transaction | Polling |
Configuring App Triggers
- Select the piece and trigger
- Connect your account (OAuth2 or API key)
- Configure trigger-specific settings (e.g., which channel, label, or project to watch)
- Click Load Data to fetch sample events for building subsequent steps
Deduplication
Polling triggers include built-in deduplication to ensure the same event isn't processed twice. ThinkFleet tracks the last processed item ID or timestamp and only processes new items on each poll.
Trigger Best Practices
- Use real-time triggers when available — They're faster and reduce API calls
- Filter at the trigger level — Many triggers support filtering (e.g., Gmail label filter) to avoid unnecessary flow runs
- Test with real data — Use "Load Data" to get actual events from your connected accounts
- Secure webhooks — Always validate webhook signatures for production flows
- Monitor polling frequency — High-frequency polling can consume API rate limits