ml-connector
DeltekSFTP / Flat Files

Deltek and SFTP / Flat Files integration

Deltek runs project-based accounting and ERP. SFTP / Flat Files is the file-exchange transport that older systems and EDI trading partners use when they have no API. Connecting the two lets data that arrives as files become posted transactions in Deltek, and lets Deltek records leave as files a partner can pick up. ml-connector reads files from the SFTP inbound folder, maps each layout to the canonical model, and posts AP invoices, journal entries, and supplier records into Deltek Vantagepoint over its REST API. It also writes Deltek data back out as files on a schedule you control.

How Deltek works

Deltek Vantagepoint exposes firms, contacts, employees, and projects through Hub REST APIs, plus AP invoices, AR invoices, journal entries, cash receipts, expense reports, and payments through Accounting Transaction APIs, all on a tenant-specific URL such as https://{company}.deltekfirst.com/{company}/api/. It authenticates with OAuth2 using the password grant, which must be explicitly enabled, and returns a bearer token that expires in about an hour. Deltek Costpoint instead uses SOAP web services, JWT certificate auth, and flat-file preprocessor templates. Vantagepoint has no general event bus for cloud connectors: its workflow webhooks carry no fixed schema and no HMAC signature, so finance records are read by polling.

How SFTP / Flat Files works

SFTP / Flat Files has no API and no request and response model. It is an SSH File Transfer Protocol transport on port 22 where data lives as files in folders: an inbound folder the partner drops files into, an outbound folder the connector writes to, and processed and error folders for housekeeping. File formats are per-partner and include CSV, fixed-width, X12 EDI, and EDIFACT. Authentication is by SSH private key or username and password, with the server host key verified to prevent interception. There is no push: a poller must list the inbound directory on a schedule, download new files, and move handled files aside so they are not read again.

What moves between them

The inbound flow runs from the SFTP server into Deltek. ml-connector polls the inbound folder, parses each new file, and posts it into Deltek Vantagepoint: invoice files become AP invoices, GL files become journal entries, and vendor files become firm records, each mapped to valid Deltek GL accounts and organizations. The outbound flow runs from Deltek to the partner: ml-connector reads Deltek transactions over the REST API and writes them as files into the outbound folder in the agreed format. Both directions run on a schedule, typically every 5 to 60 minutes, since neither system pushes events.

How ml-connector handles it

ml-connector stores both credential sets encrypted. For SFTP it authenticates with an SSH private key or a password and verifies the server host key on every connection, and for Deltek it requests an OAuth2 password-grant token and refreshes it when a call returns 401. A BullMQ repeatable job lists the inbound folder, filters out filenames already in its processed log, downloads each new file, and validates its format before mapping. Each file maps to a canonical entity, so a CSV or X12 810 invoice becomes a Vantagepoint AP invoice and a GL flat file becomes a journal entry. Because Deltek has no idempotency header, the connector checks for an existing record by invoice or journal number before posting, and on the SFTP side it deduplicates by filename and content hash so a re-poll never imports a file twice. Real edge cases are handled directly: partial uploads are caught by a sentinel file or a two-read size check, CRLF and Windows-1252 encodings are normalized, host-key changes are surfaced rather than silently accepted, and X12 files get a 997 acknowledgment written back to the acks folder. Failed posts retry with backoff and replay from a full audit trail.

A real-world example

A 250-person architecture and engineering firm runs Deltek Vantagepoint for project accounting. Its largest subconsultant and two facilities vendors have no API and send billing as CSV and X12 810 files to an SFTP folder every week. Before the integration, an accountant downloaded each file, opened it in a spreadsheet, and keyed every invoice into Vantagepoint by hand, which delayed approvals and caused duplicate entries when a vendor resent a file. With Deltek and SFTP / Flat Files connected, each new file is parsed and posted as a Vantagepoint AP invoice against the right project and GL account, duplicates are blocked by filename and invoice-number checks, and the accounting team reviews posted invoices instead of typing them.

What you can do

  • Post invoice, journal, and vendor files from the SFTP inbound folder into Deltek Vantagepoint over its REST API.
  • Write Deltek transactions back out as CSV or X12 files into the partner outbound folder on a schedule.
  • Bridge SFTP key or password auth and Deltek OAuth2 password-grant tokens, refreshing tokens automatically.
  • Deduplicate by filename and content hash, and check for existing Deltek records before posting to prevent duplicates.
  • Detect partial uploads, normalize encodings and line endings, and write X12 997 acknowledgments back to the acks folder.

Questions

Which direction does data move between Deltek and SFTP / Flat Files?
Both directions. Inbound, ml-connector reads files from the SFTP server and posts them into Deltek as AP invoices, journal entries, or supplier records. Outbound, it reads Deltek transactions over the REST API and writes them as files in the partner folder. Each flow runs on its own schedule because neither system pushes events.
How does the integration avoid importing the same file twice?
SFTP has no idempotency at the protocol level, so ml-connector enforces it. It tracks a processed-file log keyed by filename, size, and content hash, and skips any file already handled. On the Deltek side it also queries by invoice or journal number before posting, since Vantagepoint has no idempotency header of its own.
Why does the connector poll instead of receiving events?
SFTP is a pull-only transport with no native push mechanism, and Deltek Vantagepoint cloud has no general webhook event bus for finance records. ml-connector therefore lists the inbound folder and reads Deltek on a fixed schedule, typically every 5 to 60 minutes. It moves handled files to the processed folder so each one is imported only once.

Related integrations

Connect Deltek and SFTP / Flat Files

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started