Skip to main content

Overview

IMS (Inventory Management System) providers push CSV inventory files to AutoSnap’s SFTP server. The IMS feed system automatically:
  1. Polls for new/changed files every 60 seconds
  2. Parses CSVs using provider-specific field mappings
  3. Normalizes data into a unified vehicle schema
  4. Tracks additions, updates, and removals between imports
  5. Fires webhooks on updates and staleness

Supported Providers

How It Works

1. Provider pushes CSV to SFTP

Each provider pushes a CSV file to files.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

The endpoint validates that the file exists and was updated within 48 hours before creating the config.
The provider and ftp_path fields may differ. provider determines which field mapping is used to parse the CSV. ftp_path is the actual directory name on SFTP. For example, MaxDigital uses provider: "maxdigital" but ftp_path: "firstlook".

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.complete webhook 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 the staleness_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 the dealer_identifier field to filter rows:
The 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.

ims.vehicle.removed

Fired when a vehicle was in the previous import but is no longer in the current file.

ims.feed.stale

Fired when a feed file hasn’t been updated within the configured threshold.

API Reference