Importing Products
IntentFlow keeps its own copy of your catalog so autocomplete stays fast — the AI work happens before a shopper types, not while they wait. You can keep that copy in sync in three ways. Pick whichever fits your shop; you can also combine them.
| Method | Who it's for | How updates happen | Effort |
|---|---|---|---|
| Product feed | Any shop that can publish a feed URL | IntentFlow pulls your feed on a schedule | Lowest — set once |
| API | Shops with developers | Your shop pushes changes to IntentFlow | Medium — one integration |
| Manual upload | One-off loads & migrations | You upload a file when you want | Low — but manual |
Whichever method you use, every product travels the same pipeline: it is validated, preserved as a raw merchant snapshot, normalized into IntentFlow's canonical product fields, and — if its source hash is new or changed — queued for enrichment. After enrichment saves fresh suggestions and hidden metadata, the product is indexed for autocomplete and smart collections. The method only decides how the product arrives, never what happens to it. See Product Index for the field list every method shares.
Product limits are enforced per store across every import method. Free stores can hold up to 100 products; updates to existing products are still allowed when a store is at its limit. Imports never fail because of the limit — once the store is full, any additional new products are skipped instead. The import completes and reports how many rows were skipped in skipped_rows so you can upgrade and re-import the remainder. Free stores also receive AI phrase enrichment for up to 5 products per store; products beyond that limit are still imported, but enrichment jobs are not queued until the store upgrades.
Method 1: Product feed
Give IntentFlow a URL to your product feed and we fetch it automatically on a schedule you choose. This is the easiest method to keep running: once configured, your catalog stays in sync with no further work.
Best for: Shopify, WooCommerce, and custom shops that already publish (or can publish) a product feed.
Supported formats
Developers implementing a feed should use the exact schemas and examples in Feed Formats.
- Google Merchant / Google Shopping XML — the standard product feed most platforms can already generate. If you run Google Shopping ads, you already have one.
- JSON feed — a hosted JSON document using the same product shape as the API.
Set it up
- Go to Store → Feeds → Add feed.
- Paste your feed URL and pick the format (CSV, Google XML, or JSON).
- Choose a refresh interval: every 15 minutes, hour, 6 hours, or 24 hours. The default is every 6 hours.
- (Optional) Add credentials if your feed URL is password-protected.
- Save. You can press Refresh now any time to pull immediately.
How feed sync behaves
- A feed is treated as your complete catalog. Products in the feed are added or updated; products that disappear from the feed are automatically marked out of stock (they stop showing as available, but nothing is deleted).
- If a fetch fails (feed down, bad format), your existing catalog is left untouched and IntentFlow retries on the next scheduled run.
- The Feeds page shows each feed's last import time, imported count, status, and any last-run error. Use Logs on a feed to review each check with its imported, valid, invalid, and timestamp details.
- Use Remove products on a feed to delete only the products last imported by that feed. The feed itself, manual uploads, API products, and products from other feeds are left in place.
Method 2: API
Send product changes to IntentFlow from your shop whenever your catalog changes. This gives you the freshest results and fits naturally into an existing backend.
Best for: shops with developer resources that want near-real-time updates.
Two ways to call it
- Batch upsert — send many products at once (e.g. a nightly sync or a bulk edit):
POST /api/v1/product-imports. - Single product — update or remove one product the moment it changes in your shop:
PUT /api/v1/products/{external_id}andDELETE /api/v1/products/{external_id}.
A single-product call and a 10,000-row batch go through the identical pipeline — the API just lets you choose the batch size that matches your event.
Full request/response details, authentication, and examples are in the developer docs: Product Imports API and Product Feeds API.
Method 3: Manual upload
Upload a product file in the dashboard whenever you want. No integration, no feed — just a file.
Best for: first-time loads, migrations, and shops without a feed or developer.
- Go to Store → Imports.
- Upload a CSV file with the required columns.
- The file is validated and saved during upload; the run page shows counts and any skipped rows after the upload finishes.
Manual uploads are incremental: they add and update the products in your file and leave everything else alone. (Unlike a feed, a partial upload will not mark missing products out of stock.)
category is optional — omit the column or leave it blank for uncategorized products. Any extra column, such as color below, is stored as an additional product attribute and sent to enrichment for better suggestions. You can also use an attributes column with label/value pairs such as size: 42; color=blue. Richer catalogs may include optional fields like description, brand, author, isbn, gtin, ean, sku, mpn, compare_at_price, currency, stock_quantity, and images; these are normalized without overwriting the original raw snapshot.
external_id,title,category,price,url,image_url,in_stock,color
sku-1001,Road Running Shoe,Running Shoes,99.99,https://shop.example.com/products/road-running-shoe,https://cdn.example.com/products/1001.jpg,true,blueWhich should I use?
- Just want it to work? Use a feed — it self-updates.
- Have a developer and want instant updates? Use the API.
- One-time load or no feed available? Use manual upload, then switch to a feed later.
You can start with a manual upload today and add a feed or API integration whenever you're ready — they all write to the same catalog.