How to Onboard New Suppliers by Emailing a Product Catalog to Spojit

Let a new supplier email a PDF product catalog to a Spojit address, then have Spojit read it, extract every product, and create draft products in BigCommerce alongside matching inventory items in NetSuite.

What This Integration Does

When you onboard a new supplier, someone usually retypes their catalog line by line into your store and your ERP. This workflow removes that step. The supplier emails their PDF catalog to a dedicated Spojit address, Spojit reads the document with AI, and it creates a draft BigCommerce product and a NetSuite inventory item for each line it finds. Your merchandising team reviews the drafts and publishes them when ready, so nothing goes live before a human has checked it.

The workflow runs on a Mailhook trigger, so any mail sent to its unique address starts a run within seconds, with no mailbox or inbox connection to manage. The PDF bytes are fetched with an Attachment node, embedded into a Transient Knowledge collection that exists only for that run, and queried by AI to extract a structured product list. Each product is created as a draft, so re-running the same catalog simply produces another set of drafts you can compare or discard. Nothing is published automatically, and the transient collection is discarded the moment the run completes.

Prerequisites

  • A BigCommerce connection with permission to create products (Connections -> Add connection -> BigCommerce).
  • A NetSuite connection authorized to create item records (Connections -> Add connection -> NetSuite).
  • Agreement with the supplier on roughly how their catalog PDF is laid out (product name, SKU, price, description), so your extraction prompt matches reality.
  • Optional: the supplier's sending email address, if you want to lock the Mailhook to a From allowlist.

Step 1: Add a Mailhook trigger and generate the supplier address

Create a new workflow and set the Trigger node type to Mailhook. Enter an Address prefix such as supplier-catalog (1 to 24 characters), then click Generate email address. Spojit produces a unique address like supplier-catalog-9f2a7c1b4e8d6a05@mailhook.spojit.com. Copy it and share it with the supplier. If you only want one supplier sending to this address, add their domain or address under From allowlist; you can also set a Subject regex like (?i)catalog so only relevant mail starts a run. The trigger output is available downstream as {{ input }}, including {{ input.from }}, {{ input.subject }}, {{ input.replyTo }}, and {{ input.attachments }}.

Step 2: Fetch the catalog PDF with an Attachment node

Add an Attachment node after the trigger. The designer only allows this node when a Mailhook trigger is present. Set Mode to Single so you get the first matching file as one object, set the Content type filter to application/pdf, and set the Filename pattern to *.pdf. Turn on Fail if no attachment matches so a supplier who forgets to attach the catalog does not silently produce an empty run. The node outputs { filename, contentType, size, content }, where content is the base64 PDF you will feed into the next step. Remember the default limits of 10 MB per attachment and 25 MB per run.

Step 3: Embed the catalog into a transient Knowledge collection

Add a Knowledge node in Embed mode. In the Collection dropdown choose Transient, so the document lives only for this run and is cleaned up automatically afterward. Set Document Type to PDF and set Document Input to the attachment bytes:

{{ attachment.content }}

No file name or embedding model is required for a transient collection. Map the chunk-count result to an Output Variable such as embedResult so you can confirm the document embedded before querying it.

Step 4: Extract the product list with a Knowledge query and a Response Schema

Add a second Knowledge node in Query mode, again with Collection set to Transient so it reads the document embedded in Step 3. This is where Miraxa, the intelligent layer across your automation, reads the catalog and returns clean data. Write a Prompt like:

Extract every product in this supplier catalog. For each product return its
name, SKU, unit price as a number, and a one-line description. Skip cover
pages, terms, and pricing tables that are not individual products.

Add a Response Schema so the output is reliable structured JSON rather than prose:

{
  "type": "object",
  "properties": {
    "products": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": { "type": "string" },
          "sku": { "type": "string" },
          "price": { "type": "number" },
          "description": { "type": "string" }
        },
        "required": ["name", "sku", "price"]
      }
    }
  }
}

Map the result to an Output Variable named catalog. You can leave Result Count at its default of 5 chunks, or raise it for very long catalogs.

Step 5: Loop over each extracted product

Add a Loop node in ForEach mode and point it at the extracted array:

{{ catalog.products }}

Each pass exposes the current product (for example {{ item.name }}, {{ item.sku }}, {{ item.price }}, and {{ item.description }}). The two creation nodes below go inside the loop body so they run once per product.

Step 6: Create a draft product in BigCommerce

Inside the loop, add a Connector node in Direct mode, choose the BigCommerce connector, and select the create-product tool. Build the product object from the loop variables, and set is_visible to false so it lands as a hidden draft for your team to review and publish:

{
  "name": "{{ item.name }}",
  "type": "physical",
  "sku": "{{ item.sku }}",
  "price": {{ item.price }},
  "description": "{{ item.description }}",
  "is_visible": false
}

Map the response to an output variable such as bcProduct so you can reference the new product ID later.

Step 7: Create the matching item in NetSuite

Still inside the loop, add another Connector node in Direct mode, choose the NetSuite connector, and select the create-record tool. Set recordType to inventoryItem and build the body from the same loop variables:

{
  "itemId": "{{ item.sku }}",
  "displayName": "{{ item.name }}",
  "salesDescription": "{{ item.description }}"
}

This creates one inventory item per product so your ERP and your store stay aligned from the start. After the loop completes, add a Send Email node that emails your merchandising team (and optionally replies to the supplier at {{ input.replyTo }}) summarizing how many products were created and reminding the team to review the BigCommerce drafts before publishing.

Tips

  • Keep the extraction Knowledge node in Query mode with a Response Schema rather than Agent mode: a fixed schema makes the downstream BigCommerce and NetSuite payloads predictable.
  • If suppliers sometimes send several PDFs in one email, switch the Attachment node to Multiple mode and wrap Steps 3 and 4 in a Loop over {{ attachment.attachments }}.
  • Use a transient collection here, not a persistent one: each catalog should be embedded and discarded so old supplier data never bleeds into a new extraction.
  • If you want a person to approve before any records are created, drop a Human node between Step 4 and the loop so a reviewer can confirm the extracted product count first.

Common Pitfalls

  • Scanned-image PDFs need readable text; Spojit can embed images via OCR, but a clean text PDF extracts far more accurately than a low-resolution scan.
  • BigCommerce rejects duplicate SKUs, so re-running the same catalog will error on the BigCommerce node for products that already exist. Filter the loop or check for an existing product first if you expect repeats.
  • The Attachment node limits are 10 MB per file and 25 MB per run by default; a large multi-page catalog can exceed these, so split very large catalogs before sending.
  • Always embed and query with the same transient collection in the same run: a Query node pointed at a persistent collection will not see the document you just embedded transiently.

Testing

Before sharing the address with a real supplier, email a short sample PDF containing two or three products to your Mailhook address and open the run in execution history. Confirm the Attachment node fetched the PDF, the Embed node reports a chunk count, and the Query node's catalog variable contains the expected products. Check that two draft (hidden) products appear in BigCommerce and two inventory items appear in NetSuite, then delete those test records. Once a small sample behaves correctly, enable the workflow and hand the address to the supplier.

Learn More

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