INSIGHTS
AI & Automation Insights for Operators
Practical guides on AI assistants, workflow automation, lead intelligence, and field operations. Written for business owners and operators who want results, not hype.
Phone Number Format Wrong After Sync: Three Fields
Phone numbers come out wrong after a sync because a phone number is three fields, country code, national number, and extension, and every system in the stack stores a different subset and normalizes at a different moment. Salesforce rewrites a 10 or 11 digit number on save and drops the leading 1, HubSpot stores E.164 but formats only on display, Airtable formats any 10 digit string as US, Google Sheets executes a leading plus sign as a formula, and Zapier's formatter leaves an invalid number untouched without failing the step. The SMS gateway is the only strict stop, so the failure shows up there, hops after the damage was done. The fix is to normalize once at the boundary into two fields, an E.164 number and a separate extension, and to treat the pretty display format as each receiver's job.
Record Owner Wrong After Sync: Owner Is a Foreign Key
Record owner comes out wrong after a sync because owner is not a text field. It is a foreign key into the receiving system's own user directory, and the write only lands on the person you meant if that person exists there under a matching key, is active, holds the seat or security role that lets them own records, and the receiver's own assignment machinery does not change the answer after your write succeeds. When any of those fail, most systems fall back to the user the API key belongs to, which is why the symptom is a CRM where the integration user owns everything. The fix is an explicit user map keyed on email, a named fallback owner that is never the integration user, and turning off the receiver's assignment rules for the sync's writes.
Attachment Links Dead After a Sync: The URL Was a Lease
Attachment links die after a sync because the URL an API hands you is a lease, not an address: Airtable download URLs last about 2 hours, Notion-hosted files and OneDrive download URLs last 1 hour, Dropbox temporary links last 4 hours, S3 presigned URLs last at most 7 days and die early with the credential that signed them, and Slack and HubSpot private files never open without the caller's own token. The automation reads the link within seconds so the run succeeds; the human who clicks the stored link days later gets the failure. The fix is to copy the bytes into storage you own while the lease is fresh, store the object key plus the source system and source file ID, and mint a fresh link at read time.
Created Date Wrong After Import: Every Record Says Today
After an import or migration, every record shows today's created date because the created date is a fact about the receiving system, not about the customer, and most systems will not let you override it. Salesforce and Microsoft Dataverse allow it, both only on the initial insert and both as a one-way door; HubSpot contacts, Airtable, and Notion do not allow it at all. The durable fix is to carry a business date you own, such as customer since or original created date, into every system as its own field and to key every age-based automation and report on that field instead of the system audit field.
Multi-Select Fields: Why a Sync Wipes the Other Values
When an automation adds one value to a multi-select field and the existing values disappear, the cause is that HubSpot, Salesforce, Airtable, and Notion all treat a multi-select write as a replacement of the whole set, not an append. Each exposes a different append syntax or none at all, so the durable fix is the same in every tool: read the current values, merge as a set, and write the full set back, comparing as a set so ordering differences never trigger a spurious update.
HTML Tags Showing in Notes After a Sync
Formatting breaks after a sync because text carries a representation (HTML, Markdown, Slack mrkdwn, or plain) that no field declares, so the string moves and the meaning does not. There are two mechanisms: a representation mismatch, where markup lands in a field that reads a different one and shows literally as <p> or **bold**, and escape drift, where an API that returns & as & is copied into a field that stores it as text, so it comes back as &amp; on the next pass. The fix is to declare each field's representation, convert exactly once at the hop, and never let a converted field sync back.
Notes Cut Off at 255 Characters After a Sync
Text longer than a receiving field's limit is handled four different ways depending on the system: rejected outright (Salesforce STRING_TOO_LONG, PostgreSQL varchar), silently clipped (MySQL without strict mode, an explicit cast, a Truncate step), dropped entirely (a Google Sheets cell past 50,000 characters on import), or cut only on display while the stored value stays whole (Salesforce reports at 255). The dangerous one is a silent clip inside a two-way sync, because the shortened copy syncs back as a fresh edit and overwrites the original, so length has to be checked at the hop, in the receiver's unit, and overflow routed rather than trimmed.
Line Items in Automations: The Half-Written Order
An order with multiple line items turns one trigger into N separate writes, and each platform leaves a different half-written shape when write k fails: Zapier runs iterations in parallel so any subset can be missing, n8n finishes each node for every item before starting the next, and Make stops at the failed bundle. The durable fix is a child key derived from the parent ID plus the line's identity, an upsert instead of a create, and a parent status that only flips to complete once the child count matches.
Dropdown Values Don't Match Between Your Systems
Mismatched dropdown values between systems are a governance problem rather than a mapping problem, because the option set is editable by ordinary users in Salesforce, HubSpot, and Airtable. The durable fix is to name exactly one system as the vocabulary owner, match on the stable internal value instead of the display label, and route an unrecognized value to a queue instead of defaulting it to Other.
Blank Merge Fields: When a Fallback Is the Wrong Fix
A blank merge field is a data problem surfacing at send time, so a fallback value hides it rather than fixing it. Give cosmetic fields such as a greeting a fallback, and make load-bearing fields such as an appointment time or an invoice number block the send instead, because a message that reads correctly with a missing value is worse than one that never went out.
Stripping Quoted Text From Email Replies Without Regex
Most automations strip quoted email history with a regex, but the correct method depends on where the mail comes from. Microsoft Graph returns a reply-only body in uniqueBody, Mailgun returns stripped-text, and Postmark returns StrippedTextReply, while the Gmail API and SendGrid Inbound Parse return the full body and leave the work to you. Check which tier your mail source supports before writing any parsing code.
Garbled Characters? Only One Kind Is Repairable
Garbled text in customer records is four different failures wearing one symptom, and only one of them can be repaired in place. A value that reads José still contains every byte of the original and can be fixed with a two-step re-decode, while a replacement character or a value that stops mid-word means the bytes are already gone and the only fix is re-importing from the source. The fourth case is not corruption at all: the name looks perfect and still fails an exact-match lookup, because two systems stored it in different Unicode normalization forms.
Want a system like the ones we write about?
We build practical AI and automation systems for businesses that need better workflows, connected tools, and cleaner operations.
Request a Workflow Review