Overview
IMS (Inventory Management System) providers push CSV inventory files to AutoSnap’s SFTP server. The IMS feed system automatically:- Polls for new/changed files every 60 seconds
- Parses CSVs using provider-specific field mappings
- Normalizes data into a unified vehicle schema
- Tracks additions, updates, and removals between imports
- Fires webhooks on updates and staleness
Supported Providers
How It Works
1. Provider pushes CSV to SFTP
Each provider pushes a CSV file tofiles.autosnap.cloud under /import/{provider}/. For example, vAuto files land in /import/vauto/MP14015.csv. Providers overwrite the same filename on each push.
2. Create a feed config
3. Automatic polling
Once created, the system polls SFTP every 60 seconds. On each poll:- Checks file mtime (modification time) — skips download if unchanged
- Downloads and computes MD5 hash — skips import if hash matches last import
- Parses CSV with the provider’s field mapping
- Upserts vehicles into
ims_vehicle(keyed on feed + VIN) - Marks vehicles as removed if they were in the previous import but not in the current file
- Fires
ims.import.completewebhook with import stats - Fires per-vehicle webhooks (
ims.vehicle.created,ims.vehicle.updated,ims.vehicle.removed)
4. Staleness detection
A separate check runs every 30 minutes. If a feed’s file hasn’t been updated within thestaleness_threshold_hours (default 48), an ims.feed.stale webhook fires. Stale alerts are throttled to once per 24 hours per feed.
Multi-Dealer Files
Some providers (like ProMax) send all dealers in a single CSV file. Use thedealer_identifier field to filter rows:
dealer_identifier is matched against the dealer ID column in the CSV (e.g., ProMaxID for ProMax, DealerId for vAuto).
Webhook Events
Subscribe to IMS webhook events to get real-time notifications. See Webhooks for setup instructions.The
ims.* prefixed events are specific to IMS feed imports. The non-prefixed equivalents (import.complete, vehicle.created, vehicle.updated, vehicle.removed) cover website scraper events only. If a dealership has both a website scraper and an IMS feed, subscribe to both sets to receive events from both sources.ims.import.complete
Fired after each successful import cycle. Includes counts for new, updated, and removed vehicles.
ims.vehicle.created
Fired for each new vehicle added during an import.
ims.vehicle.updated
Same payload structure as ims.vehicle.created. Fired when an existing vehicle’s data changes between imports.