FTP, NetSuite and Slack: Supplier Feed Import Template

On a schedule, download a supplier CSV from an FTP server, upsert the items into NetSuite, and post an import summary to Slack.

What It Builds

This Spojit template runs on a Schedule trigger. At each run it uses the ftp connector to download the latest supplier feed file, parses the CSV rows, then loops over them and upserts each item into NetSuite with the netsuite connector. When the import finishes, a slack connector step posts a summary (rows read, items created or updated, and any rows that failed) to your chosen channel.

The result is a hands-off nightly supplier catalog sync: your team wakes up to fresh item data in NetSuite and a single Slack message confirming exactly what changed, instead of manually pulling files and keying them in.

The Prompt

Paste this into Miraxa, the intelligent layer across your automation, and it builds the workflow, connecting the tools for you:

Build a workflow that runs every weekday at 6am Australia/Sydney time. Use the FTP connector to download the latest supplier feed CSV from /incoming/supplier-feed.csv, parse it into rows, then loop over each row and upsert the item into NetSuite by SKU. After the loop, post a message to the #inventory channel in Slack summarizing how many rows were read, how many items were created or updated, and how many failed.

Connectors Used

  • Schedule trigger - fires on a 5-field cron with an IANA timezone (for example 0 6 * * 1-5 in Australia/Sydney).
  • ftp - download-file pulls the supplier CSV; list-directory and get-file-info help you target the right file.
  • csv - parse turns the downloaded file into rows you can loop over.
  • netsuite - upsert-record creates or updates each item; get-item can look up an existing record first if you prefer.
  • slack - send-message posts the import summary to your channel.

Customize It

Change the cron and timezone to match your supplier's drop time, swap /incoming/supplier-feed.csv for your real path, and point the summary at a different channel by editing #inventory. If your feed keys items by an internal ID rather than SKU, tell Miraxa which column to match on, and tighten the summary to call out specific failure reasons if you want more detail per run.

Tips

  • Keep the NetSuite step in Direct mode on the netsuite connector so each upsert is deterministic and costs no AI credits. Reserve Agent mode for rows that need judgment, such as mapping inconsistent supplier categories.
  • Use the csv connector's parse tool before the Loop node so each iteration receives one clean row, and reference fields as {{ row.sku }} and {{ row.price }}.
  • Have the FTP step download into a workflow variable and confirm the file exists with get-file-info before parsing, so an empty or missing feed fails clearly instead of importing nothing.

Common Pitfalls

  • If the supplier overwrites the same filename each day, an old file can be re-imported when the new drop is late. Check get-file-info for a recent modified time, or read from a dated path, before running the upsert loop.
  • Schedule triggers use the timezone you set, not your browser's. A cron of 0 6 * * 1-5 in Australia/Sydney is a different moment than the same cron in UTC, so set the IANA timezone explicitly.
  • Large feeds can hit per-run limits and slow each loop iteration. Slice the CSV or split the import across runs if a single file holds thousands of rows.

Related

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.