Yeah this one tripped me up too when I first looked at it. The Zapier integration for FieldPulse is solid overall, but there's a weird edge case with how custom fields get serialized when they're passed to the Zap trigger payload.
The Problem
When you set up a Zap that triggers on a work order event (like work_order.created or work_order.status_changed), any custom fields that contain line breaks or certain special characters simply don't appear in the data Zapier receives. Not empty — completely missing. This breaks Zaps that rely on custom field values for routing or data transformation.
Symptoms
- Your Zap runs successfully, but the custom field you need is absent from the trigger data
- The field shows up in FieldPulse's UI and API, but Zapier's test data shows it as missing
- Fields with single-line values work fine; multi-line text fields are the ones that vanish
- Zapier's "Find Data" step may show the field, but the actual trigger payload omits it
Root Cause
Here's what's happening: FieldPulse's webhook payload serializes custom fields as a nested object, but the Zapier parser has trouble with unescaped newlines in JSON string values. The webhook fires correctly and the data leaves our servers intact, but somewhere in the handoff to Zapier's ingestion layer, fields with \n or \r\n get dropped silently rather than throwing an error.
I dug into this with our platform team last month. The webhook payload looks like this:
{
"work_order_id": "wo_abc123",
"custom_fields": {
"field_001": "Single line value - this works fine",
"field_002": "Line one\nLine two\nLine three - this disappears"
}
}
Zapier's parser expects the JSON to be fully escaped. When it hits that unescaped newline, it treats the field as malformed and skips it rather than surfacing an error. Super frustrating because it looks like the data was never sent.
Resolution
We've got a fix going out in API v2.1 (should be live by end of March). The webhook payload will properly escape newlines as \\n before transmission, which Zapier handles correctly.
In the meantime, here are your options:
Option 1: Use a Webhook Catch Hook Instead (Recommended)
Bypass Zapier's native FieldPulse trigger and use a Webhooks by Zapier "Catch Hook" instead. This gives you the raw payload, which you can then parse with a Code by Zapier step or Formatter if needed.
- In your Zap, choose "Webhooks by Zapier" → "Catch Hook"
- Copy the webhook URL and add it in FieldPulse under Settings → Integrations → Webhooks
- Set the event type you need (e.g.,
work_order.status_changed) - In your Zap, add a "Code by Zapier" step to parse the custom fields:
const customFields = inputData.rawBody ? JSON.parse(inputData.rawBody).custom_fields : {};
return { custom_field_values: JSON.stringify(customFields) };
Yeah, it's an extra step, but you get all your data.
Option 2: Sanitize Your Custom Field Input
If you control how data enters those custom fields, strip newlines before save. Replace with | or ; or something your Zap can split on later. Not elegant, but it works today.
Option 3: Use the FieldPulse API Directly
If this is a critical workflow, consider building against our API directly instead of Zapier. You get full control over parsing and can handle edge cases properly. Check out How do I paginate through a large list of work orders via the API? for a starting point.
Status
Fix targeted for API v2.1 (webhook payload serialization update). I'll update this article once it's live. If you're blocked on this, ping me directly or open a dev support ticket and reference this issue — we can enable the escaped payload format on your account early.
Related
- How do I trigger a Zap when a work order status changes to "Completed"?
- Webhook payload is missing custom fields — is this expected behavior?
- API v2.1 Now Available with Webhook Improvements