Overview
This n8n workflow automates dynamic pricing for your Shopify store using AI-powered optimization. It fetches product and order data via Streamline Connector, analyzes sales velocity, inventory levels, and optional competitor prices, then uses GPT-4 to recommend optimal price adjustments while enforcing strict safety guardrails.
Key Features
- Data Integration: Pulls products, inventory, and orders via Streamline Connector endpoints
- AI-Powered Analysis: GPT-4o analyzes demand signals and recommends prices
- Safety Guardrails: Margin floors, max change limits, confidence thresholds
- Dry-Run Mode: Test recommendations without making actual changes
- Competitor Monitoring: Optional scraping of competitor prices (configurable)
- Comprehensive Logging: All decisions tracked in Google Sheets
- Slack Alerts: Real-time notifications for price changes
Architecture
┌─────────────────────────────────────────────────────────────────────────────────────┐ │ TRIGGER ZONE │ │ ┌──────────────┐ ┌──────────────┐ │ │ │ Every 6 Hours │ │ Manual Test │ │ │ └──────┬───────┘ └──────┬───────┘ │ │ └──────────┬────────┘ │ │ ▼ │ │ ┌───────────────┐ │ │ │ Config │ ◄── Environment variables & feature flags │ │ └───────┬───────┘ │ └───────────────────┼──────────────────────────────────────────────────────────────────┘ │ ┌───────────────────┼──────────────────────────────────────────────────────────────────┐ │ ▼ DATA RETRIEVAL ZONE │ │ ┌────────────────────────────┐ ┌────────────────────────────┐ │ │ │ Streamline: Get Inventory │ │ Streamline: Get Orders │ │ │ │ /products/inventory │ │ /api/order-data │ │ │ └────────────┬───────────────┘ └────────────┬───────────────┘ │ │ └──────────┬──────────────────────┘ │ │ ▼ │ │ ┌───────────────────────┐ │ │ │ Merge & Enrich Data │ ◄── Calculate sales velocity, stock days │ │ └───────────┬───────────┘ │ │ ▼ │ │ ┌───────────────────────┐ │ │ │ Split by Variant │ │ │ └───────────┬───────────┘ │ └──────────────────────────┼───────────────────────────────────────────────────────────┘ │ ┌──────────────────────────┼───────────────────────────────────────────────────────────┐ │ ▼ COMPETITOR MONITORING (Optional) │ │ ┌───────────────────────┐ │ │ │ Scraping Enabled? │ │ │ └───────┬───────┬───────┘ │ │ YES │ │ NO │ │ ▼ ▼ │ │ ┌─────────────────────┐ ┌────────────────────┐ │ │ │ Get Competitor URLs │ │ Skip Competitors │ │ │ │ (Google Sheets) │ └─────────┬──────────┘ │ │ └──────────┬──────────┘ │ │ │ ▼ │ │ │ ┌─────────────────────┐ │ │ │ │ Scrape Prices │ │ │ │ └──────────┬──────────┘ │ │ │ └──────────┬─────────────┘ │ │ ▼ │ │ ┌───────────────────┐ │ │ │ Merge Paths │ │ │ └─────────┬─────────┘ │ └────────────────────────┼─────────────────────────────────────────────────────────────┘ │ ┌────────────────────────┼─────────────────────────────────────────────────────────────┐ │ ▼ AI PRICING ENGINE │ │ ┌───────────────────────┐ │ │ │ Prepare AI Prompt │ ◄── Build context with all product data │ │ └───────────┬───────────┘ │ │ ▼ │ │ ┌───────────────────────┐ │ │ │ OpenAI GPT-4o │ ◄── Analyze & recommend optimal price │ │ │ (JSON Response) │ │ │ └───────────┬───────────┘ │ │ ▼ │ │ ┌───────────────────────┐ │ │ │ Parse & Validate │ ◄── Enforce guardrails │ │ └───────────┬───────────┘ │ └──────────────────────────┼───────────────────────────────────────────────────────────┘ │ ┌──────────────────────────┼───────────────────────────────────────────────────────────┐ │ ▼ DECISION & UPDATE ZONE │ │ ┌───────────────────────┐ │ │ │ Valid Change? │ │ │ └───────┬───────┬───────┘ │ │ YES │ │ NO │ │ ▼ ▼ │ │ ┌─────────────────────┐ ┌────────────────────┐ │ │ │ Dry Run Mode? │ │ Log Skipped │ │ │ └──────┬────────┬─────┘ └─────────┬──────────┘ │ │ LIVE │ │ DRY │ │ │ ▼ ▼ │ │ │ ┌───────────┐ ┌───────────┐ │ │ │ │ Update │ │ Dry Run │ │ │ │ │ Shopify │ │ Log │ │ │ │ └─────┬─────┘ └─────┬─────┘ │ │ │ └─────────────┴───────────────┘ │ │ │ │ │ ▼ │ │ ┌───────────────────┐ │ │ │ Merge All Results │ │ │ └─────────┬─────────┘ │ └────────────────────────┼─────────────────────────────────────────────────────────────┘ │ ┌────────────────────────┼─────────────────────────────────────────────────────────────┐ │ ▼ LOGGING & ALERTS │ │ ┌───────────────────────┐ │ │ │ Log to Google Sheets │ │ │ └───────────┬───────────┘ │ │ ▼ │ │ ┌───────────────────────┐ │ │ │ Send Slack Alert? │──► Slack Notification │ │ └───────────┬───────────┘ │ │ ▼ │ │ ┌───────────────────────┐ │ │ │ Generate Summary │ │ │ └───────────┬───────────┘ │ │ ▼ │ │ ┌───────────────────────┐ │ │ │ Final Output │ │ │ └───────────────────────┘ │ └──────────────────────────────────────────────────────────────────────────────────────┘
Setup Instructions
1. Prerequisites
- n8n Instance: Self-hosted recommended (for community nodes)
- Streamline Connector Account: Get your Shop ID from the dashboard
- Shopify Custom App: Admin API access with
write_productsscope - OpenAI API Key: GPT-4o access
- Google Sheets: Two sheets for competitor URLs and logging
- Slack Workspace: Incoming webhook or bot token (optional)
2. Credentials Setup
Create the following credentials in n8n Settings → Credentials:
| Credential Name | Type | Required Scopes |
|---|---|---|
OpenAI API | OpenAI | API key with GPT-4 access |
Shopify Admin API | Shopify | read_products, write_products, read_inventory |
Google Sheets | Sheets API access | |
Slack API | Slack | chat:write, channels:read (optional) |
3. Google Sheets Setup
Competitor URLs Sheet
Create a sheet named "Competitors" with columns:
| sku | competitor_name | competitor_url |
|---|---|---|
| SKU-001 | Amazon | https://amazon.com/dp/... |
| SKU-001 | Walmart | https://walmart.com/ip/... |
Price Changes Log Sheet
Create a sheet named "Price Changes" with columns: | Timestamp | Product | Variant | SKU | Old Price | New Price | Change % | Confidence | Reasoning | Status | Demand | Inventory | 30d Sales |
4. Configuration
Edit the Config node to set your values:
const config = { // Streamline Connector SHOP_ID: 'YOUR_SHOP_ID', // From Streamline dashboard // Pricing Rules MIN_MARGIN_PERCENT: 30, // Minimum margin (adjust to your business) MAX_PRICE_CHANGE_PERCENT: 10, // Maximum single adjustment ±10% MIN_CONFIDENCE_THRESHOLD: 70, // AI must be 70%+ confident MIN_PRICE_DIFF_PERCENT: 2, // Minimum change to trigger update // Feature Flags DRY_RUN: true, // START WITH TRUE - test first! ENABLE_SLACK_ALERTS: true, ENABLE_COMPETITOR_SCRAPING: false, // Enable when ready // Sheet IDs COMPETITOR_SHEET_ID: 'YOUR_COMPETITOR_SHEET_ID', LOG_SHEET_ID: 'YOUR_LOG_SHEET_ID', // Slack SLACK_CHANNEL: '#pricing-alerts', // Filtering PRODUCT_TAG_FILTER: 'dynamic-pricing', // Tag products to include MAX_PRODUCTS_PER_RUN: 50 };
5. Product Tagging
Tag products in Shopify with dynamic-pricing (or your chosen tag) to include them in optimization. This prevents accidental price changes on products you want to manage manually.
Safety Guardrails
The workflow enforces multiple layers of protection:
1. Margin Floor
MIN_MARGIN_PERCENT: 30 // Never drop below 30% margin
AI prompt includes this constraint and validates output.
2. Maximum Change Limit
MAX_PRICE_CHANGE_PERCENT: 10 // Max ±10% per run
Prevents dramatic swings even if AI recommends them.
3. Confidence Threshold
MIN_CONFIDENCE_THRESHOLD: 70 // Require 70%+ confidence
Low-confidence recommendations are logged but not applied.
4. Minimum Change Threshold
MIN_PRICE_DIFF_PERCENT: 2 // Ignore tiny changes
Avoids unnecessary updates for insignificant differences.
5. Dry Run Mode
DRY_RUN: true // Log recommendations without updating
Always start with DRY_RUN: true to validate AI behavior.
6. Product Filtering
PRODUCT_TAG_FILTER: 'dynamic-pricing'
Only processes explicitly tagged products.
AI Prompt Engineering
The workflow builds a comprehensive prompt for GPT-4o including:
## Product Information - Title, SKU, Current Price - Compare-at Price (if set) - Inventory Quantity - 30-Day Sales Volume - 30-Day Revenue - Days of Stock Remaining - Demand Signal (HIGH/MEDIUM/LOW/VERY_LOW)
## Competitor Prices (if available) - Amazon: $X.XX - Walmart: $Y.YY
## Pricing Rules (MUST FOLLOW) 1. Minimum margin: 30% 2. Maximum single change: ±10% 3. Premium positioning constraints 4. Demand-based adjustments
## Output Format { "suggested_price": <number>, "price_change_percent": <number>, "confidence": <0-100>, "action": "increase" | "decrease" | "no_change", "reasoning": "<brief explanation>", "revenue_impact_estimate": "<projected impact>" }
Testing Checklist
Phase 1: Dry Run Testing
- [ ] Set
DRY_RUN: truein Config - [ ] Run workflow manually
- [ ] Check Google Sheets log for recommendations
- [ ] Verify AI reasoning makes sense
- [ ] Confirm safety rules are being enforced
- [ ] Review Slack alerts (if enabled)
Phase 2: Limited Live Test
- [ ] Tag only 2-3 low-risk products with
dynamic-pricing - [ ] Set
DRY_RUN: false - [ ] Run workflow
- [ ] Verify Shopify prices updated correctly
- [ ] Monitor sales impact over 24-48 hours
Phase 3: Gradual Rollout
- [ ] Increase to 10-20 products
- [ ] Monitor for 1 week
- [ ] Analyze revenue impact in log sheet
- [ ] Adjust thresholds if needed
- [ ] Scale to full catalog
Troubleshooting
Common Issues
| Issue | Cause | Solution |
|---|---|---|
| No products processed | Tag filter not matching | Check PRODUCT_TAG_FILTER matches Shopify tags |
| AI returns no_change for everything | Confidence too low | Lower MIN_CONFIDENCE_THRESHOLD or improve data quality |
| Rate limits | Too many products | Reduce MAX_PRODUCTS_PER_RUN or increase schedule interval |
| Shopify update fails | Missing credentials | Verify Shopify API credentials have write_products scope |
| Empty competitor data | Scraping disabled or no URLs | Enable scraping and populate competitor sheet |
Error Handling
The workflow includes continue-on-error patterns. Check the execution logs in n8n for detailed error messages on individual products.
Cost Estimation
| Component | Cost Per Run | Notes |
|---|---|---|
| OpenAI GPT-4o | ~$0.01-0.05/product | Depends on prompt size |
| Streamline Connector | Included | Part of subscription |
| Google Sheets | Free | Within limits |
| n8n | Varies | Self-host or cloud pricing |
Example: 50 products × $0.03 × 4 runs/day = ~$6/day
Recommended Schedule
| Business Type | Schedule | Rationale |
|---|---|---|
| High-velocity (fashion, electronics) | Every 4 hours | Rapid market changes |
| Standard retail | Every 6 hours | Balance freshness vs. cost |
| B2B / slow-moving | Daily | Less price sensitivity |
| Seasonal peaks | Every 2 hours | Maximize opportunity |
Extending the Workflow
Add Manual Approval Gate
Insert a Slack interactive message before the Shopify update:
// Add after "Valid Change?" node // Slack: Send message with Approve/Reject buttons // Webhook: Wait for user response // If approved: proceed to update // If rejected: log and skip
Add Google Trends Demand Signal
// Insert before AI Prompt // HTTP Request to Google Trends API // Extract search volume for product keywords // Merge into demand_signal calculation
Add Inventory Reorder Alerts
// After final output // If days_of_stock < 7 AND demand_signal = HIGH // Send Slack alert: "Low stock warning for [product]"
Support
- Streamline Connector Docs: https://streamline-connector.com/docs
- n8n Community: https://community.n8n.io
- OpenAI API Docs: https://platform.openai.com/docs
Version History
| Version | Date | Changes |
|---|---|---|
| 1.0.0 | 2026-02 | Initial release |
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article