Troubleshooting
This guide covers common sync errors, their root causes, and how to fix them. Use the sync run error details to identify the specific issue, then find the relevant section below.
Connection and Authentication Errors
Source Connection Failed
Error: Source connection failed: connection timed out or Source connection failed: authentication error
Cause: SignalSmith cannot connect to the source warehouse to execute the model query.
Solutions:
- Navigate to Warehouses and check the source’s health status
- Re-test the source connection — credentials may have been rotated
- Verify network access — SignalSmith IPs may need to be re-allowlisted
- For Snowflake: check if the warehouse is suspended (enable auto-resume)
- For Databricks: check if the SQL warehouse or cluster is running
Destination Authentication Expired
Error: Destination authentication failed: invalid or expired token
Cause: The destination’s OAuth token or API key has expired.
Solutions:
- Navigate to Destinations and click on the affected destination
- Click Re-authenticate to refresh the OAuth token
- For API key-based destinations, update the API key
- Re-test the destination connection
Rate Limit Exceeded
Error: Rate limit exceeded: too many API requests or HTTP 429 Too Many Requests
Cause: The sync is sending requests faster than the destination API allows.
Solutions:
- Reduce sync frequency — Increase the interval between runs
- Stagger syncs — If multiple syncs hit the same destination, spread them out
- Check destination plan — Some destinations have higher rate limits on premium plans
- Contact destination support — Request a rate limit increase if needed
SignalSmith automatically retries rate-limited requests with exponential backoff, but sustained throttling can cause the run to exceed its timeout.
Model Query Errors
SQL Syntax Error
Error: Model query failed: syntax error at line X
Cause: The model’s SQL query has a syntax error. This can happen if the query was written for a different SQL dialect or if the source warehouse was changed.
Solutions:
- Navigate to Models and open the affected model
- Review the SQL at the reported line number
- Fix the syntax error (check for dialect-specific functions)
- Click Preview to validate the query
- Save the model
Table or Column Not Found
Error: Model query failed: relation "X" does not exist or Column 'X' not found
Cause: The model references a table or column that no longer exists in the warehouse.
Solutions:
- Check if the table was renamed, moved, or deleted in the warehouse
- Verify the source’s database and schema settings are correct
- Check if the warehouse user still has access to the table
- Update the model SQL to reference the correct table/column names
Query Timeout
Error: Model query failed: query execution exceeded timeout (300s)
Cause: The model query takes too long to execute, typically due to large data volumes, missing indexes, or complex joins.
Solutions:
- Add filters — Use
WHEREclauses to reduce the data scanned (e.g., filter by date) - Remove unnecessary columns — Only
SELECTthe columns you actually need - Optimize joins — Ensure join columns are indexed in the warehouse
- Use CTEs instead of subqueries — Some warehouses optimize CTEs better
- Increase warehouse resources — For Snowflake, use a larger warehouse size; for Databricks, use a larger SQL warehouse
Field Mapping Errors
Required Field Not Mapped
Error: Required field 'LastName' is not mapped
Cause: The destination requires certain fields for record creation, and those fields are not mapped in the sync configuration.
Solutions:
- Navigate to the sync’s field mapping configuration
- Map the required field to an appropriate model column
- If no model column matches, update the model SQL to include the required data:
-- Add a default value for a required field
SELECT
email,
first_name,
COALESCE(last_name, 'Unknown') AS last_name -- Ensure non-null
FROM customersData Type Mismatch
Error: Field 'Amount': expected number, got text "N/A"
Cause: The data type of the model column does not match the destination field’s expected type.
Solutions:
- Clean the data in the model SQL:
-- Convert text to number, handling invalid values
SELECT
email,
CASE
WHEN TRY_CAST(amount AS DECIMAL) IS NOT NULL
THEN CAST(amount AS DECIMAL)
ELSE 0
END AS amount
FROM orders- Update the destination field type to accept the incoming data type
- Filter out invalid rows in the model SQL:
SELECT email, amount
FROM orders
WHERE amount IS NOT NULL AND amount != 'N/A'Invalid Email Format
Error: Invalid email format: "john@" or Email validation failed
Cause: The email column contains values that don’t pass the destination’s email validation.
Solutions:
- Filter invalid emails in the model SQL:
SELECT email, name
FROM customers
WHERE email LIKE '%@%.%' -- Basic email format check
AND email NOT LIKE '%@%@%' -- No double @
AND LENGTH(email) > 5- Clean email data upstream in your warehouse
String Exceeds Max Length
Error: String value exceeds maximum length (255) for field 'Description'
Cause: A text column value is longer than the destination field’s maximum length.
Solutions:
- Truncate in the model SQL:
SELECT
email,
LEFT(description, 255) AS description -- Truncate to 255 chars
FROM customers- Increase the field’s max length in the destination (if configurable)
Row-Level Errors
Duplicate Records
Error: Duplicate value for unique field 'Email': john@example.com
Cause: The model returns multiple rows with the same identifier value that the destination treats as unique.
Solutions:
- Add deduplication to the model SQL:
WITH ranked AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY email ORDER BY updated_at DESC) AS rn
FROM customers
)
SELECT email, name, phone
FROM ranked
WHERE rn = 1 -- Keep only the most recent record per email- Use a different identifier that is unique
- Check for data quality issues in the source warehouse
NULL Primary Key
Error: Primary key column 'customer_id' contains NULL values
Cause: The model results include rows where the primary key column is NULL.
Solutions:
- Filter out NULL primary keys in the model SQL:
SELECT customer_id, email, name
FROM customers
WHERE customer_id IS NOT NULL- Use a different column as the primary key
- Fix the data quality issue in the source warehouse
Record Not Found for Update
Error: Record with identifier 'email=john@example.com' not found in destination
Cause: The sync is trying to update a record that doesn’t exist in the destination. This typically happens when the destination record was manually deleted.
Solutions:
- This is usually self-correcting — the next run will create the record
- If using upsert mode, this error should not occur (upsert creates if not found)
- Check that the identifier mapping is correct
System-Level Errors
Out of Memory
Error: Sync run failed: out of memory processing model results
Cause: The model query returns too many rows or too much data for the sync engine to process.
Solutions:
- Reduce row count — Add filters to the model SQL to limit the result set
- Reduce column count — Remove unnecessary columns from the SELECT
- Split into multiple syncs — Break a large sync into smaller syncs with filtered subsets
- Contact support — For very large syncs (millions of rows), contact SignalSmith support for guidance
Destination API Error
Error: Destination API error: 500 Internal Server Error
Cause: The destination’s API is experiencing an outage or internal error.
Solutions:
- Check the destination’s status page for known outages
- Wait and retry — transient API errors often resolve on their own
- SignalSmith automatically retries on 5xx errors with exponential backoff
- If the issue persists, contact the destination’s support team
Sync Run Timeout
Error: Sync run exceeded maximum duration (2h) and was terminated
Cause: The sync run took too long to complete, usually due to a very large dataset or a slow destination API.
Solutions:
- Optimize the model query to return fewer rows
- Add incremental filters (e.g., only sync records updated in the last 7 days)
- Split the sync into smaller batches
- Check for destination API performance issues
Diagnostic Steps
When troubleshooting a sync issue, follow these steps:
1. Check the Run Details
Navigate to the sync’s Runs tab and click on the failed or errored run. Review:
- The overall run status and error message
- Row-level error details (if any)
- The run timeline to identify which phase failed
2. Verify the Source
- Check the source’s health status under Warehouses
- Re-test the connection
- Manually preview the model to verify the SQL executes correctly
3. Verify the Destination
- Check the destination’s health status under Destinations
- Re-authenticate if needed
- Verify the destination object and field configuration haven’t changed
4. Check the Field Mapping
- Review the sync’s field mapping for any unmapped required fields
- Verify data type compatibility between source and destination
- Check for new required fields added to the destination since the sync was created
5. Review the Data
- Preview the model results to check for data quality issues
- Look for NULL values in required fields
- Check for duplicates in identifier columns
- Verify data types match expectations
Getting Help
If you’ve followed the troubleshooting steps above and the issue persists:
- Check the knowledge base — Search for your specific error message
- Contact support — Include the sync ID, run ID, and error details
- Review the API docs — Ensure your API usage matches the expected format
Next Steps
- Monitor sync runs for ongoing health
- Review sync modes to ensure you’re using the right mode
- Configure scheduling to optimize run frequency