Importing bulk data into Odoo using S3 fast load setup

Importing bulk data

This guide will walk you through creating importable files and getting them picked up for load into your Odoo database hosted by Steersman.

This will allow you to update products, create price lists, add vendor prices, add and link images, and more, without needing to obtain external IDs for products. Odoo updates data in the background, without locking records, causing concurrent update issues or tying up resources used to run your database processes. If you need to update a million products simultaneously, this is the way to do it. You can also schedule these updates to run on a date and time of your choice.

Preliminary setup required

You will need to have your own AWS account and provide Steersman with information about the AWS users who must have access to bulk data updates in your Odoo. Steersman will set up permissions for these users to load files into a partition of our AWS S3 file storage, from which Steersman’s scripts will perform fast and stable data loading into your database.

Uploading your data files

After Steersman provides access to the AWS S3 location, access your AWS location and navigate to your S3 folder.

  • Your folder for data files within Steersman’s S3 will be: s3://sbs-uploads/file_engine/"company name"/csv/
    • Here you will be able to add new files and see file statuses, with files showing within sub-folders
      • ‘processing/’ - these are files that have been picked up and are scheduled for processing or being processed
      • ‘done/’ - these are files that were successfully uploaded
        • A multi-line file may have some lines fail to import/update - in such cases, we skip those specific lines, but the import keeps running for other lines
      • ‘error/’ - these are files that had a critical error upon import
  • When uploading a file, place your CSV file into a subfolder ‘new/’
    • New files are picked up every minute, but could be processed later based on your requested processing data and the processing queue
  • The name of your file will define how it will be ingested – files named not per the required format will not be ingested or may be ingested incorrectly, potentially causing damage to your data

Uploading new images and PDF documents to be added to your PIM in Odoo

There are two steps to loading images and documents – you need to upload them to make them available to Odoo, and then provide a file specifying the relationships of images or documents to products.

  • Your folder for adding images/documents to Steersman’s S3 will be: s3://sbs-uploads/file_engine/"company name"/media/
    • Here you will be able to add new files and see file statuses, with files showing within sub-folders
      • ‘processing/’ - these are images that have been picked up and are scheduled for processing or being processed
      • ‘done/’ - these are files that were successfully uploaded
        • A multi-line file may have some lines fail to import/update - in such cases, we skip those specific lines, but the import keeps running for other lines
      • ‘error/’ - these are files that had a critical error upon import
  • When uploading new images or documents, place your image/document files into a subfolder ‘new/’
  • Your file names will be used to map files to products via a CSV import

Supported data files and what they update.

Click on individual file types to see naming and field requirements for each file/data type.

  • Vendor costs
    • Adds new vendor prices and auto-disables prior price for the same product from the same vendor.
  • Product scheduled sale price
    • Adds scheduled price lines into the “sale price” (“list price”) field and sets previously active price lines to expire on the “start date” of the new price.
  • Product scheduled minimum advertised price (MAP)
    • Adds scheduled price lines into the “minimum advertised price” (“MAP”) field and sets previously active price lines to expire on the “start date” of the new price.
  • Product scheduled normal market cost
    • Adds scheduled price lines into the “normal market cost” field and sets previously active price lines to expire on the “start date” of the new price.
  • Static pricelist (pricelist with numeric prices for specific products without logic or formulas)
    • Adds manual prices for specific products into a designated “pricelist” that must be configured as a “static” pricelist. Ok to add 1,000,000+ price entries into a single pricelist that way.
  • Product images
    • Specifies which images in the media library should be assigned to products and allows determining the sequence for the images on each product.
  • Product documents
    • Specifies which documents in the media library should be assigned to products and allows determining the sequence for the documents on each product. Example documents include MSDS and spec sheets, which are displayed on product pages as PDFs.
  • Product website availability flags
    • Specifies whether a product should be published to the website, and if so, what availability profile it should be assigned to (allow add to cart or block, display in categories, or leave published for indexed pages only, stock availability messaging, etc)
  • Product reorder rules
    • Adds or updates reorder rules for specific products in specific locations. Automatically updates an existing record in case of matching product and location instead of adding a new rule.
  • Product information
    • Creates or updates products and various product identifiers, dimensions, and descriptions.

File specifications

Vendor costs

  • File name format:
    • YYYY-MM-DD-hh-mm-seq-type.csv
      • The date and time set are the earliest times to process the file in UTC
    • 2024-11-18-14-28-001-vendor-cost.csv
Column header (field) Required Description
product_variant_id True*
internal_reference True*
product_template_id True*
min_quantity True
cost False empty to delete
sequence False will push other lines down, last by default
lead_time_days False integer, ‘delay’ field in Odoo
date_start False YYYY-MM-DD
date_end False YYYY-MM-DD
code False vendor code
name False vendor product name

*It is required to have one of the product identifiers (product_variant_id, or internal_reference, or product_template_id), if more than one of these identifiers is provided - the first one will be used in the order listed here, and others will be disregarded.

Product scheduled sale price

  • File name format:
    • YYYY-MM-DD-hh-mm-seq-type.csv
      • The date and time set are the earliest times to process the file in UTC
    • 2024-11-18-14-28-001-price-schedule-list.csv
Column header (field) Required Description
product_variant_id True*
internal_reference True*
product_template_id True*
price True
date_start False YYYY-MM-DD
date_end False YYYY-MM-DD

*It is required to have one of the product identifiers (product_variant_id, or internal_reference, or product_template_id), if more than one of these identifiers is provided - the first one will be used in the order listed here, and others will be disregarded.

Product scheduled minimum advertised price (MAP)

  • File name format:
    • YYYY-MM-DD-hh-mm-seq-type.csv
      • The date and time set are the earliest times to process the file in UTC
    • 2024-11-18-14-28-001-price-schedule-map.csv
Column header (field) Required Description
product_variant_id True*
internal_reference True*
product_template_id True*
price True
date_start False YYYY-MM-DD
date_end False YYYY-MM-DD

*It is required to have one of the product identifiers (product_variant_id, or internal_reference, or product_template_id), if more than one of these identifiers is provided - the first one will be used in the order listed here, and others will be disregarded.

Product scheduled normal market cost

  • File name format:
    • YYYY-MM-DD-hh-mm-seq-type.csv
      • The date and time set are the earliest times to process the file in UTC
    • 2024-11-18-14-28-001-price-schedule-normal-market-cost.csv
Column header (field) Required Description
product_variant_id True*
internal_reference True*
product_template_id True*
price True
date_start False YYYY-MM-DD
date_end False YYYY-MM-DD

*It is required to have one of the product identifiers (product_variant_id, or internal_reference, or product_template_id), if more than one of these identifiers is provided - the first one will be used in the order listed here, and others will be disregarded.

Static pricelist

pricelist with numeric prices for specific products without logic or formulas.

  • File name format:
    • YYYY-MM-DD-hh-mm-seq-type.csv
      • The date and time set are the earliest times to process the file in UTC
    • 2024-11-18-14-28-001-pricelist-static.csv
Column header (field) Required Description
pricelist_id True database product.pricelist id
product_variant_id True*
internal_reference True*
product_template_id True*
price False empty to delete

*It is required to have one of the product identifiers (product_variant_id, orinternal_reference, orproduct_template_id`), if more than one of these identifiers is provided - the first one will be used in the order listed here, and others will be disregarded.

Product images

  • File name format:
    • YYYY-MM-DD-hh-mm-seq-type.csv
      • The date and time set are the earliest times to process the file in UTC
    • 2024-11-18-14-28-001-product-image.csv
Column header (field) Required Description
product_variant_id True*
internal_reference True*
product_template_id True*
url True S3 or public HTTP URL
name False generated from the URL if missing
slug False generated from name if missing
tag_ids False comma separated values, whole cell in quotes
sequence False will push other lines down, last by default

*It is required to have one of the product identifiers (product_variant_id, or internal_reference, or product_template_id), if more than one of these identifiers is provided - the first one will be used in the order listed here, and others will be disregarded.

Product documents

  • File name format:
    • YYYY-MM-DD-hh-mm-seq-type.csv
      • The date and time set are the earliest times to process the file in UTC
    • 2024-11-18-14-28-001-product-document.csv
Column header (field) Required Description
product_variant_id True*
internal_reference True*
product_template_id True*
url True S3 or public HTTP URL
name False generated from the URL if missing
slug False generated from name if missing
tag_ids False comma separated values, whole cell in quotes
sequence False will push other lines down, last by default

*It is required to have one of the product identifiers (product_variant_id, or internal_reference, or product_template_id), if more than one of these identifiers is provided - the first one will be used in the order listed here, and others will be disregarded.

Product website availability flags

  • File name format:
    • YYYY-MM-DD-hh-mm-seq-type.csv
      • The date and time set are the earliest times to process the file in UTC
    • 2024-11-18-14-28-001-product-website.csv
Column header (field) Required Description
website_id True odoo database id
product_variant_id True*
internal_reference True*
product_template_id True*
availability_id False empty to disable

*It is required to have one of the product identifiers (product_variant_id, or internal_reference, or product_template_id), if more than one of these identifiers is provided - the first one will be used in the order listed here, and others will be disregarded.

Product reorder rules

  • File name format:
    • YYYY-MM-DD-hh-mm-seq-type.csv
      • The date and time set are the earliest times to process the file in UTC
    • 2024-11-18-14-28-001-product-reorder-rule.csv
Column header (field) Required Description
location_id True odoo database id
product_variant_id True*
internal_reference True*
product_template_id True*
active True boolean
trigger True “auto” or “manual”
min_quantity True
max_quantity True
quantity_multiple True

*It is required to have one of the product identifiers (product_variant_id, or internal_reference, or product_template_id), if more than one of these identifiers is provided - the first one will be used in the order listed here, and others will be disregarded.

Product information

  • File name format:
    • YYYY-MM-DD-hh-mm-seq-type.csv
      • The date and time set are the earliest times to process the file in UTC
    • 2024-11-18-14-28-001-product.csv
Column header (field) Required Description
product_variant_id True*
internal_reference True*
product_template_id True*
name False
model_name False model
barcode False
mpn False
oempn False alternate part numbers, comma separated
nsn False national stock number
unspsc False
hs_code False
asin False
weight False
length False
width False
height False
description_preview_md False preview description (markdown)
description_short_md False summary (markdown)
description_long_md False full description (markdown)
slug False website slug
meta_title False
meta_description False
meta_og_title False OpenGraph title (Facebook/Meta)
meta_og_description False OpenGraph description (Facebook/Meta)
meta_twitter_title False card title (Twitter/X)
meta_twitter_description False card description (Twitter/X)
public_brand_ids False database brand ids, comma separated
public_category_ids False database category ids, comma separated

*It is required to have one of the product identifiers (product_variant_id, or internal_reference, or product_template_id), if more than one of these identifiers is provided - the first one will be used in the order listed here, and others will be disregarded.