Vendor Price List Intake

Getting vendor price lists into the pricing app — email pipelines, parsing with pricing_app_parse_price_list, and handing off to the file import workflow.

How a vendor price list goes from an inbound email to live products in the pricing app. This page covers the intake side — getting the data onto nvrbackup and parsed. The actual import mechanics live on Pricing App File Import; this page hands off to it.

The shape of the workflow

1. Receive the vendor price list (usually email)
2. Get it onto nvrbackup
3. Parse / normalize with pricing_app_parse_price_list
4. Import via the file import workflow

Steps 2–4 are exactly the Pricing App File Import flow. The only thing that changes vendor to vendor is how the list arrives and any per-vendor quirk in step 1.

Email pipelines

Most vendors send price lists as email attachments or inline tables. The intake job is to extract that content, land it on nvrbackup, and parse it.

Aqua Systems

Aqua Systems sends prices as recurring emails with the CSV attached. Pipeline:

download attachment  →  save to nvrbackup  →  parse  →  import

The gmail_get_attachment tool handles the download. From there it’s the standard file import flow.

D&H

The D&H category importer requires the dandh-tenant header on every API call. The D&H API does not support server-side category filtering, so the importer pulls everything and post-filters client-side. Expect a longer pull and some ASIN enrichment gaps — this is documented in more detail under the vendor notes on Pricing App File Import.

Parsing with pricing_app_parse_price_list

Once the raw list is available, pricing_app_parse_price_list normalizes it into a CSV on the server. Point it at an output_path on nvrbackup so the file lands where the importer can read it:

pricing_app_parse_price_list(
    raw_text="<normalized vendor rows>",
    vendor_name="<Vendor>",
    output_path="/tmp/<vendor>.csv",
)

Handing off to the import

With a parsed CSV on nvrbackup, the rest is the standard import:

pricing_app_create_file_import(
    file_path="/tmp/<vendor>.csv",
    vendor_name="<Vendor>",
    use_generic_parser=True,
)

Monitor with pricing_app_get_import_status or pricing_app_monitor_import. Path rules, the use_generic_parser=True requirement, and the “success but no products landed” troubleshooting all live on Pricing App File Import — read it before writing any import code.