Acoustic Connect can bulk-import behavior signals from a file already staged on your Acoustic SFTP server, processing many historical or batched signals in a single job. Use this method instead of createSignals when you need to backfill historical data or move signals captured outside Connect's real-time tracking — for example, a data pipeline that exports nightly behavior logs.
Requirements
Signal limits
Your Connect subscription determines which signal types you can import. The same catalog and tier restrictions apply as for real-time import:
| Signal | Pro | Premium & Ultimate |
|---|---|---|
| Account registered | ✅ | ✅ |
| Add-to-cart | ✅ | ✅ |
| Browse abandonment | ❌ | ✅ |
| Cart abandonment | ❌ | ✅ |
| Error | ❌ | ✅ |
| Identification | ✅ | ✅ |
| Logged in | ✅ | ✅ |
| On-site search | ❌ | ✅ |
| Order | ✅ | ✅ |
| Page view | ❌ | ✅ |
| Product configuration | ❌ | ✅ |
| Product view | ❌ | ✅ |
| Remove-from-cart | ✅ | ✅ |
| Rich media interaction | ❌ | ✅ |
| Wishlist item added | ✅ | ✅ |
| Wishlist item removed | ✅ | ✅ |
Contact mapping
Each signal in the file maps to a contact via identifiableAttributes, using one of: contactKey (existing contacts only), email, sms, or whatsapp. A contact key alone cannot create a new contact — a signal with only a contact key for an unknown contact is discarded.
File format
- Format: JSONL only — each line is one standalone signal JSON object.
fileFormat: DELIMITEDis not applicable to signals imports. - Maximum file size: 500 MB.
- Files are automatically removed from the SFTP server 14 days after upload.
Batch size
Not applicable — the entire file is submitted as one import job rather than as discrete batches.
Before you begin
Obtain your application key, which maps imported signals to an application:
- Connect Pro: Supplied during onboarding
- Connect Premium and Ultimate: Generated via Connect interface (see generate credentials documentation)
Confirm you have:
- Access to the Acoustic SFTP server (see Connect to the Acoustic SFTP server)
- A properly formatted JSONL file, already uploaded to your subscription's SFTP folder
The file must exist on the SFTP server before you call createImportJob. The mutation starts a job against a file that's already there — it does not accept or upload file content itself.
Running the mutation
First-time API users should review "Using the Connect API" for authentication and testing tool recommendations.
mutation CreateImportJob($importInput: ImportInput!) {
createImportJob(importInput: $importInput) {
id
}
}Example
{
"importInput": {
"importType": "ADD_UPDATE",
"into": "SIGNALS",
"fileFormat": "JSONL",
"skipFirstRow": false,
"jobName": "SignalsImportJob_<uuid>",
"fileLocation": {
"type": "SFTP",
"folder": "automation",
"filename": "signals.jsonl"
}
}
}Mutation arguments
importInput (required): Object — see fields below. ImportInput has additional fields used by audience and reference-set imports (dataSetId, dataSetType, mappings, attributes, consent, createSegment, and others); none of those apply when into: SIGNALS and can be omitted.
ImportInput fields for a signals import
importType(required): Enum —ADD_UPDATEis the value used for signals imports.into(required for this flow): Enum —SIGNALS. Unlike audience or reference-set imports, nodataSetIdordataSetTypeis required.fileFormat(required): Enum —JSONL.jobName(required): String — a name for the import job. Convention:SignalsImportJob_<uuid>.fileLocation(required): Object —type(required): Enum —SFTP.folder(required for SFTP): String — the SFTP subfolder name containing the file (not the full path).filename(required for SFTP): String — the filename only, excluding the folder.
notifications: Array of objects — optional; omit to send no notifications.channel(required): Enum — valid value:EMAIL.destination(required): String — where to send notifications.
skipFirstRow: Boolean (defaultfalse) — not meaningful forfileFormat: JSONL; applies only toDELIMITEDfiles.
Signal file object (one per line in the JSONL file)
appKey(required): String — your application identifier in Connect.identifiableAttributes(required): Object — one contact identifier as a key-value pair. Valid keys:contactKey,email,sms,whatsapp.sessionId: String — optional; groups signals from the same contact session. See Session ID behavior below.signalContent(required): JSON object — the signal data specific to each signal type. See the Real-time signal import reference for the field breakdown per signal type — the samesignalContentshapes apply here.test: Boolean (defaultfalse) — optional; flag for test signals.
{
"signal": {
"appKey": "YOUR_APP_KEY",
"identifiableAttributes": {
"email": "[email protected]"
},
"sessionId": "SESS-789456123AB",
"signalContent": {
"signalType": "addToCart"
},
"test": false
}
}Response fields
The mutation returns a JSON response containing:
data: Object — root data object containing mutation resultscreateImportJob: Object — result of the import job creationid: String — the import job identifier. Use this to track progress in Job monitoring.
Verification methods
Method 1: Check job status
- Go to Data management > Job monitoring.
- Select the Job status tab.
- Find the job by name and track its progress.
Method 2: Review contact activity
- Go to Data management > Audience.
- On the All contacts tab, select a contact associated with the imported signals.
- Check the activity feed for the signals.
Notes:
- Activity feed shows the 5 most recent signals per session (identification signals aren't displayed).
- Displays the last 1,000 signals or signals from the last 30 days, sorted by signal timestamp.
- Newly imported signals may not be immediately visible — wait a few minutes and refresh.
Method 3: Signal management
Go to Behavioral management > Signal management and select a signal type to confirm imported signals appear in the list.
How it works
Required vs. optional fields
If any required field in a signal line is missing or invalid, that entire signal is discarded — the rest of the file continues processing independently. Optional fields enhance a signal but don't prevent processing if omitted.
File and job requirements
- The file must already exist in the specified SFTP folder before
createImportJobis called. - Source files are automatically removed from the SFTP server 14 days after upload — re-upload if you need to re-run an import on older data.
- Maximum file size is 500 MB.
Test signals
When test is set to true:
- Signals undergo standard validation.
- They have no impact on campaigns.
- They aren't visible in the Activity feed, Segmentation, or Insights.
Session ID behavior
When you provide a sessionId:
- The system registers the session as if it was generated by the Connect library.
- Signals are included in aggregate reports and in-market interest calculations.
When you omit sessionId:
- Signals appear in contacts' activity feeds.
- Signals aren't used for aggregate reports or behavioral intelligence calculations.
Related pages
- Enable real-time import of behavior signals to Connect
- Import behavior signals from local storage
- Import behavior signals from SFTP
- Send signals from a backend system
