50 min readContent generation

Implementation Guide: Generate vehicle listings, trade-in appraisal summaries, and financing option explanations

Step-by-step implementation guide for deploying AI to generate vehicle listings, trade-in appraisal summaries, and financing option explanations for Automotive clients.

Hardware Procurement

360° Interior Camera

RicohRicoh Theta SC2 Business Edition (910810)Qty: 1

$330 per unit (MSP cost) / $600 suggested resale with setup

Captures 6K HDR 360° interior images of each vehicle for pairing with AI-generated listing descriptions. The Business Edition includes remote management features suitable for fleet deployment across rooftops.

Smartphone for Lot Photography & 360° Spins

iPhone 15 (128GB)

AppleiPhone 15 (128GB, MTP03LL/A)Qty: 1

$799 per unit (MSP cost) / $999 suggested resale with configuration

Dedicated lot photography device used with Glo3D or Spyne AI apps to create 360° vehicle spin walkarounds and custom background shots. Dedicated device prevents staff from mixing personal and business use.

Portable Camera Tripod Kit

MotorStreetMotorStreet Portable HD Camera KitQty: 1

$1,800 per unit (MSP cost) / $3,000 suggested resale with installation and training

Provides stable, repeatable 360° exterior walkaround capture for consistent vehicle photography. Includes turntable mount and adjustable height tripod for SUVs and trucks.

Content Management Workstation

DellDell OptiPlex 7010 SFF (Intel i5-13500, 16GB DDR5, 512GB NVMe SSD)Qty: 1

$950 per unit (MSP cost) / $1,400 suggested resale with setup and imaging

Dedicated workstation for the dealership's content manager or Internet Sales Manager to review AI-generated content, manage inventory feeds, approve/edit listings, and publish to distribution channels. Standard business PC—no GPU required.

Software Procurement

Dealer Specialties StoryBuilder

Dominion Dealer Solutions (Dealer Specialties)

$500–$800/month per rooftop (MSP cost) / $800–$1,200/month suggested resale

Primary vehicle listing generation engine. Uses VIN data and AI-powered technology to automatically create unique vehicle descriptions for each inventory unit, pulling key features and trim data. Supports auto-regeneration every few days for organic SEO growth. Serves over 3,000 dealerships nationally with proven DMS integrations.

OpenAI API (GPT-5.4 mini)

OpenAIGPT-5.4 mini

$0.15/1M input tokens + $0.60/1M output tokens; typical dealership usage $5–$50/month (MSP cost) / bundled into managed service at $500–$1,500/month

Powers the custom trade-in appraisal summary generator and financing option explanation engine. GPT-5.4 mini provides high-quality text generation at extremely low cost—approximately $0.10–$0.50/month for 300 vehicles. Used via REST API with structured prompts that embed compliance disclaimers.

$20/month cloud plan or free self-hosted on MSP infrastructure / bundled into managed service fee

Workflow automation platform that orchestrates the entire content pipeline: triggers on new inventory additions from DMS data feeds, calls VIN decode APIs, routes data to OpenAI for trade-in and financing content, formats output, and pushes to the dealer's website CMS and CRM. Self-hosted option gives MSP full control.

Spyne AI

SpyneSaaS

$350/month (MSP cost) / $550–$700/month suggested resale

AI-powered vehicle photography enhancement platform. Automatically removes and replaces photo backgrounds, enhances image quality, and produces studio-quality listing photos from smartphone captures. Pairs with AI-generated text descriptions for complete listing packages.

NHTSA vPIC VIN Decoder API

National Highway Traffic Safety Administration

Free (government API)

Decodes VIN numbers to extract year, make, model, trim, engine, transmission, body style, and safety equipment data. Provides the structured vehicle data that feeds into AI prompt templates for trade-in summaries and financing explanations.

DataOne VIN Decoder

DataOne Software

$0.05–$0.15 per decode; ~$15–$45/month for 300 vehicles / bundled into managed service

Commercial VIN decode service that supplements NHTSA data with OEM package details, MSRP breakdowns, standard and optional equipment lists, and color codes. Provides richer feature data for more compelling AI-generated descriptions.

Jasper AI (Optional Upsell)

Jasper AITeams Plan

$125/month Teams plan (MSP cost) / $200–$300/month suggested resale

Optional general-purpose AI content platform for dealerships that also want blog posts, social media content, email campaigns, and ad copy beyond vehicle listings. Brand voice training ensures consistent dealership tone. Best suited as an upsell for marketing-savvy dealers.

Prerequisites

  • Active DMS system (CDK Global, Reynolds & Reynolds, or Tekion) with API access or scheduled data export capability. Verify DMS contract includes data access rights—CDK Fortellis APIs are pay-as-you-go; Reynolds may require partnership status.
  • Inventory management platform (vAuto, Dealerslink, HomeNet, or equivalent) with inventory feed export in ADF/XML or CSV format, including VIN, stock number, pricing, mileage, and condition fields.
  • Dealer website platform (Dealer.com, Dealer Inspire, DealerOn, or equivalent) that accepts inventory feed updates including vehicle description/comments fields via API or feed import.
  • CRM system (DriveCentric, AutoRaptor, VinSolutions, Elead, or equivalent) with ability to receive formatted email templates for financing explanations sent to customers.
  • Minimum 50 Mbps download / 10 Mbps upload internet connectivity at the dealership. 100+ Mbps symmetrical recommended if doing high-volume photo uploads.
  • Firewall configured to allow outbound HTTPS (port 443) to: api.openai.com, *.n8n.cloud (or self-hosted n8n server IP), vpic.nhtsa.dot.gov, and all SaaS platform domains.
  • Designated Content Manager or Internet Sales Manager (ISM) at the dealership who will serve as the human-in-the-loop reviewer for AI-generated content, particularly financing explanations.
  • Dealership's legal counsel or compliance officer available for a 1-hour review session to approve AI output templates for financing content (TILA/Regulation Z and FTC CARS Rule compliance).
  • OpenAI API account with billing configured and API key generated. Organization-level account recommended for MSP management across multiple dealership clients.
  • Valid business email domain for SSO/MFA configuration on all AI platform accounts. No shared passwords—each user gets individual credentials per FTC Safeguards Rule requirements.

Installation Steps

...

Step 1: Environment Discovery & Audit

Conduct a thorough audit of the dealership's existing technology stack to map all integration points. Document the DMS vendor and version, inventory management platform, website provider, CRM, and any existing content generation workflows. Identify how vehicle data currently flows from acquisition to website listing. Record API credentials, feed formats, and update frequencies. This audit determines which integration paths are available and identifies any blockers (e.g., locked-down DMS APIs, legacy feed formats).

1
DMS: Vendor, version, API availability (CDK Fortellis, Tekion REST, Reynolds partner status)
2
Inventory Mgmt: Platform name, feed export format (ADF/XML, CSV, API), update frequency
3
Website: Platform name, inventory feed import method, description field character limits
4
CRM: Platform name, email template capability, API for automated sends
5
Current content workflow: Who writes descriptions? How long per vehicle? Any existing templates?
6
Network: Run speed test at dealership (speedtest.net), document up/down speeds
7
Compliance: Current disclaimer language, state-specific disclosure requirements
Note

Schedule a 2-hour on-site or remote discovery session with the dealership's General Manager, Internet Sales Manager, F&I Manager, and IT contact (if any). The F&I Manager is critical for understanding current financing disclosure practices. Request read-only DMS login credentials for data mapping.

Step 2: Provision OpenAI API Account & Configure Security

Create or configure the OpenAI organization account that will power the custom trade-in and financing content pipelines. Set up proper API key management, usage limits, and monitoring. This account will be managed by the MSP, not the dealership, to maintain control over costs and security.

1
Navigate to https://platform.openai.com/signup and create organization account
2
Set organization name to: [MSP_NAME]-auto-content
3
Under Settings > Billing, add payment method and set monthly usage limit
4
Generate API key for production use: Settings > API Keys > Create new secret key — Name: [DEALER_NAME]-content-prod, Permissions: Write (for chat completions)
5
Generate separate API key for development/testing: Name: [DEALER_NAME]-content-dev, Permissions: Write
6
Store keys in MSP password vault (e.g., IT Glue, Hudu, or Keeper) — NEVER store API keys in code repositories or plain text files
7
Set usage hard limit to prevent runaway costs: Settings > Limits > Set monthly budget to $100 (adjust based on volume), Set notification threshold at $50
Monitor OpenAI organization usage
shell
openai api usage --organization [org-id]  # Monitor usage after setup
Note

Use a dedicated OpenAI organization per MSP (not per dealership) to consolidate billing and monitoring. Create per-dealership API keys within the organization for tracking and revocation. The $100 monthly limit is extremely conservative—typical usage for 300 vehicles is under $1/month for GPT-5.4 mini. The limit is a safety net against prompt injection or runaway loops.

Step 3: Deploy n8n Automation Server

Set up the n8n workflow automation platform that will orchestrate the entire content generation pipeline. n8n serves as the integration hub connecting DMS data feeds, VIN decode APIs, OpenAI, and content distribution channels. Self-hosting on MSP infrastructure is recommended for maximum control and multi-tenant capability.

Option A: Self-hosted Docker deployment on Ubuntu 22.04. Option B: n8n Cloud at https://n8n.io/cloud/
bash
# Option A: Self-hosted on MSP Linux server (Ubuntu 22.04 LTS recommended)
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io docker-compose
sudo systemctl enable docker && sudo systemctl start docker

# Create n8n directory structure
sudo mkdir -p /opt/n8n/data
sudo chown -R 1000:1000 /opt/n8n/data

# Create docker-compose.yml
cat << 'EOF' > /opt/n8n/docker-compose.yml
version: '3.8'
services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - '5678:5678'
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=mspadmin
      - N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
      - N8N_HOST=n8n.yourmsp.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://n8n.yourmsp.com/
      - N8N_ENCRYPTION_KEY=${ENCRYPTION_KEY}
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - /opt/n8n/data:/home/node/.n8n
    depends_on:
      - postgres
  postgres:
    image: postgres:15
    restart: always
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=n8n
    volumes:
      - /opt/n8n/postgres-data:/var/lib/postgresql/data
EOF

# Create .env file with secrets
cat << EOF > /opt/n8n/.env
N8N_PASSWORD=$(openssl rand -base64 32)
ENCRYPTION_KEY=$(openssl rand -hex 32)
POSTGRES_PASSWORD=$(openssl rand -base64 32)
EOF

# Start n8n
cd /opt/n8n && sudo docker-compose up -d

# Verify running
sudo docker-compose ps

# Option B: n8n Cloud (simpler, $20/mo)
# Sign up at https://n8n.io/cloud/ and skip the Docker setup above
Note

Self-hosting is recommended for MSPs managing multiple dealership clients—one n8n instance can handle dozens of dealership workflows. Set up a reverse proxy (Nginx or Caddy) with SSL termination in front of n8n. The webhook URL must be publicly accessible for DMS feed triggers. Store the .env file securely and back it up to your MSP vault. For n8n Cloud, you skip all Docker steps but pay $20/month and have less customization control.

Step 4: Configure Dealer Specialties StoryBuilder for Vehicle Listings

Deploy and configure Dealer Specialties StoryBuilder as the primary vehicle listing description generator. This SaaS platform handles the high-volume, VIN-decoded vehicle description writing using AI. It integrates directly with the dealership's DMS and inventory management platform to automatically generate descriptions as vehicles are stocked in.

StoryBuilder Setup and Configuration Steps
plaintext
# 1. Contact Dealer Specialties sales: 1-800-808-4898 or dealerspecialties.com
# 2. Request StoryBuilder activation for dealership account
# 3. Provide DMS integration credentials:
#    - CDK Global: Dealer code + Fortellis API subscription
#    - Reynolds: Partner integration request (may require 2-4 week approval)
#    - Tekion: REST API key from Tekion Admin Portal

# 4. Configure StoryBuilder settings in the admin portal:
#    a. Dealership Profile:
#       - Dealership name, address, phone
#       - Brand voice: [Professional/Friendly/Luxury/Value] (match dealer preference)
#       - Excluded phrases: Configure any words/phrases the dealer wants avoided
#    b. Content Settings:
#       - Description length: 150-300 words (optimal for SEO and readability)
#       - Feature highlight count: Top 5 features per vehicle
#       - Auto-regeneration: Enable (every 5-7 days for SEO freshness)
#    c. Compliance Disclaimers:
#       - Footer text: 'Pricing excludes tax, title, license, and dealer fees.'
#       - State-specific disclosures: Add per dealership location
#    d. Feed Distribution:
#       - Enable push to: Dealer website, AutoTrader, Cars.com, CarGurus
#       - Set update frequency: Every 4 hours
Note

StoryBuilder typically takes 3-5 business days for DMS integration activation. Request a test batch of 10 vehicles before going live on full inventory. Review test output with the dealership's Internet Sales Manager for brand voice approval. The auto-regeneration feature is a key SEO differentiator—ensure it is enabled. If the dealer is on Reynolds & Reynolds, expect a longer integration timeline (2-4 weeks) due to their restrictive partner approval process. Consider Dealerslink AI Description Builder as an alternative if Reynolds integration proves difficult—they have bi-directional integration with all three major DMS providers.

Step 5: Build VIN Decode Data Enrichment Pipeline

Create the data enrichment pipeline in n8n that takes raw vehicle data from the DMS feed and enriches it with detailed VIN-decoded information from NHTSA and DataOne. This enriched data feeds into the custom AI content generation prompts for trade-in summaries and financing explanations.

  • In n8n, create a new workflow: 'VIN Data Enrichment Pipeline'
  • Node 1: Webhook Trigger (receives inventory data from DMS feed or manual trigger) — Type: Webhook | Method: POST | Path: /vin-enrich | Authentication: Header Auth (X-API-Key)
  • Node 2: NHTSA VIN Decode (free) — Type: HTTP Request | Method: GET | URL: https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVinValues/{{$json.vin}}?format=json | Response: Parse JSON
  • Node 3: Extract NHTSA Fields — Type: Set | Fields to extract: make, model, year, trim, engine, transmission, drivetrain, bodyClass, fuelType
  • Node 4: DataOne VIN Decode (optional, for richer data) — Type: HTTP Request | Method: GET | URL: https://api.dataonesoftware.com/webservices/vindecoder/decode | Query Params: vin={{$json.vin}}&client_id=[DATAONE_ID]&authorization_code=[DATAONE_KEY] | Note: DataOne costs ~$0.05-0.15/decode
  • Node 5: Merge NHTSA + DataOne Data — Type: Merge | Mode: Combine by position
  • Node 6: Format Enriched Vehicle Object — Type: Code (JavaScript)
Node 6: Format Enriched Vehicle Object
javascript
// n8n Code node (JavaScript)

const vehicle = {
  vin: $input.first().json.vin,
  stockNumber: $input.first().json.stockNumber,
  year: $input.first().json.year,
  make: $input.first().json.make,
  model: $input.first().json.model,
  trim: $input.first().json.trim,
  mileage: $input.first().json.mileage,
  askingPrice: $input.first().json.askingPrice,
  engine: $input.first().json.engine,
  transmission: $input.first().json.transmission,
  drivetrain: $input.first().json.drivetrain,
  bodyClass: $input.first().json.bodyClass,
  fuelType: $input.first().json.fuelType,
  exteriorColor: $input.first().json.exteriorColor,
  interiorColor: $input.first().json.interiorColor,
  features: $input.first().json.features || [],
  condition: $input.first().json.condition || 'Used',
  tradeInValue: $input.first().json.tradeInValue || null,
  retailValue: $input.first().json.retailValue || null
};
return [{ json: vehicle }];
Note

The NHTSA API is free but rate-limited; add a 500ms delay between calls in batch processing. DataOne provides significantly richer feature and package data but costs per decode—enable it for trade-in appraisals where detail matters, skip it for basic listings that StoryBuilder already handles. Test the webhook endpoint using curl or Postman before connecting to the DMS feed.

Step 6: Build Trade-In Appraisal Summary Generator

Create the n8n workflow that generates professional trade-in appraisal summary documents using OpenAI GPT-5.4 mini. These summaries are sent to customers who have received a trade-in value assessment, explaining the valuation in clear, professional language that builds trust and transparency.

1
In n8n, create a new workflow: 'Trade-In Appraisal Summary Generator'
2
Node 1: Webhook Trigger — Type: Webhook | Method: POST | Path: /trade-in-summary | Authentication: Header Auth | Expected payload: { customerFirstName, vehicleYear, vehicleMake, vehicleModel, vehicleTrim, mileage, condition, tradeInValue, marketComparables, conditionNotes, dealerName }
3
IMPORTANT: DO NOT include customer PII (SSN, full name, address, credit score) in the AI API call. Only first name and vehicle data.
4
Node 2: OpenAI Chat Completion — Type: OpenAI node (built-in to n8n) | Model: gpt-5.4-mini | Temperature: 0.4 (lower = more consistent, factual output) | Max Tokens: 800 | System Prompt: (see custom_ai_components for full prompt) | User Message: (constructed from webhook payload - see custom_ai_components)
5
Node 3: Format Output — Type: Code (JavaScript) | Wraps AI response in HTML template with dealership branding
6
Node 4: Conditional - Delivery Method — Type: Switch | Route 1: Email via CRM API | Route 2: Save to DMS customer record | Route 3: Generate PDF for print
7
Node 5a: Send via CRM Email API — Type: HTTP Request | Configure per CRM platform (DriveCentric, AutoRaptor, etc.)
8
Node 5b: Save to Document Storage — Type: HTTP Request or local file write | Save timestamped copy for compliance audit trail (2-year retention)
Note

CRITICAL COMPLIANCE NOTE: Never send customer PII (Social Security numbers, full addresses, credit information, income data) to the OpenAI API. The prompt is designed to use only first name and vehicle data. All trade-in summaries should be saved with timestamps for the 2-year record retention required by the FTC CARS Rule. Set the temperature to 0.4 for consistent, professional output—higher values introduce creative variation that is inappropriate for financial summaries.

Step 7: Build Financing Option Explanation Generator

Create the n8n workflow that generates clear, compliant explanations of financing options for customers. This is the highest-compliance-risk component of the project. All output templates must be reviewed by the dealership's legal counsel before production use. The system generates plain-language explanations of financing terms, not binding offers.

1
In n8n, create a new workflow: 'Financing Explanation Generator'
2
Node 1: Webhook Trigger — Type: Webhook | Method: POST | Path: /financing-explanation | Authentication: Header Auth | Expected payload: { customerFirstName, vehicleYear, vehicleMake, vehicleModel, vehiclePrice, downPayment, loanTermMonths, aprRange, monthlyPaymentEstimate, lenderName, dealerName, stateCode }
3
CRITICAL: Do NOT include customer credit score, SSN, income, or any Nonpublic Personal Information (NPI) per FTC Safeguards Rule
4
Node 3: OpenAI Chat Completion — Type: OpenAI node | Model: gpt-5.4-mini | Temperature: 0.3 (very low - maximum consistency for financial content) | Max Tokens: 1000 | System Prompt: (see custom_ai_components for full prompt) | User Message: (constructed from webhook payload)
5
Node 4: Compliance Disclaimer Append — Type: Code (JavaScript) | Appends mandatory legal disclaimers that are NOT AI-generated | These are static, lawyer-approved text blocks
6
Node 5: Human Review Queue — Type: Webhook response + notification | Sends content to ISM/F&I Manager for approval before delivery | Flags content as PENDING until approved
7
Node 6: Distribution (after approval) — Type: Switch -> CRM email, print, or digital retailing platform
Node 2: State Disclaimer Lookup
javascript
// Code node (JavaScript) that maps stateCode from webhook payload to the
// appropriate state-level financing disclaimer

const stateDisclaimers = {
  'CA': 'California customers: See dealer for complete CCPA disclosures.',
  'NY': 'New York customers: All financing subject to NY Banking Law requirements.',
  'TX': 'Texas customers: Advertised rates subject to approved credit through participating lenders.',
  'FL': 'Florida customers: Electronic fee and tag agency fees may apply.',
  'DEFAULT': 'See dealer for complete details. All financing subject to credit approval.'
};
const disclaimer = stateDisclaimers[$input.first().json.stateCode] || stateDisclaimers['DEFAULT'];
return [{ json: { ...$input.first().json, stateDisclaimer: disclaimer } }];
Critical

CRITICAL: This workflow includes a mandatory human-in-the-loop review step (Node 5). Financing explanations must NEVER be auto-sent to customers without human review by the F&I Manager or designated approver. This is required for TILA/Regulation Z compliance. The static disclaimers appended in Node 4 are NOT AI-generated—they are fixed legal text approved by counsel. Set temperature to 0.3 for maximum consistency. All financing explanations must include the caveat that they are illustrative estimates, not binding loan offers.

Step 8: Configure DMS Data Feed Integration

Connect the dealership's DMS to the n8n automation server to enable automatic content generation when vehicles are added to inventory or when trade-in appraisals are completed. The integration method varies by DMS vendor.

  • CDK Global (via Fortellis): Log into Fortellis Marketplace: https://marketplace.fortellis.io
  • CDK Global (via Fortellis): Subscribe to 'Inventory Events' API (pay-as-you-go)
  • CDK Global (via Fortellis): Configure webhook endpoint: https://n8n.yourmsp.com/webhook/vin-enrich
  • CDK Global (via Fortellis): Set event types: vehicle.stocked, vehicle.updated, tradein.appraised
  • CDK Global (via Fortellis): Test with sample webhook delivery
  • Tekion: Access Tekion Admin Portal > API Settings
  • Tekion: Generate REST API key with inventory read scope
  • Tekion: In n8n, create a Schedule Trigger node (every 30 minutes)
  • Tekion: Route new vehicles to VIN Enrichment pipeline
  • Reynolds & Reynolds — Option 1 (Scheduled CSV/XML export): Configure Reynolds to export inventory feed every 4 hours
  • Reynolds & Reynolds — Option 1 (Scheduled CSV/XML export): Set up SFTP server on MSP infrastructure
  • Reynolds & Reynolds — Option 1 (Scheduled CSV/XML export): n8n FTP Trigger node monitors for new files
  • Reynolds & Reynolds — Option 2 (Dealerslink middleware): Dealerslink pulls from Reynolds and exposes API for n8n
  • Fallback (Manual CSV Upload): For dealers with restricted DMS access, create an n8n Form Trigger node with fields for VIN, stock#, price, mileage, and condition — route to VIN Enrichment pipeline
Tekion
shell
# Poll inventory endpoint for vehicles updated in the last 30 minutes

# Poll Tekion inventory endpoint for new/updated vehicles:
GET https://api.tekion.com/v1/inventory?updated_since={{$now.minus(30,'minutes').toISO()}}
Test the DMS integration by posting a sample vehicle payload to the n8n webhook
shell
curl -X POST https://n8n.yourmsp.com/webhook/vin-enrich \
  -H 'Content-Type: application/json' \
  -H 'X-API-Key: [YOUR_API_KEY]' \
  -d '{"vin":"1HGBH41JXMN109186","stockNumber":"A12345","mileage":45000,"askingPrice":22995,"condition":"Used","exteriorColor":"Silver","interiorColor":"Black"}'
Note

CDK Fortellis is the easiest integration path—it supports event-driven webhooks that push data to n8n in real-time. Tekion is polling-based but has clean REST APIs. Reynolds & Reynolds is the most challenging—plan for 2-4 extra weeks if the dealer is on Reynolds. The Dealerslink middleware approach is often the best path for Reynolds dealers since Dealerslink has established bi-directional integration. Always start with the manual CSV fallback to validate the AI pipeline independently of DMS integration.

Step 9: Configure Content Distribution to Website and Marketplaces

Set up the output side of the pipeline so AI-generated content flows automatically to the dealer's website, third-party marketplaces (AutoTrader, Cars.com, CarGurus), and CRM. StoryBuilder handles vehicle listing syndication directly; the custom pipeline handles trade-in and financing content routing.

Website Integration, CRM Integration, and Compliance Audit Log configuration
plaintext
# === Website Integration (for custom AI content) ===

# Dealer.com (Cox Automotive):
# 1. Contact Dealer.com support to obtain inventory feed API credentials
# 2. Use their Inventory API to update vehicle description fields:
# PUT https://api.dealer.com/inventory/{stockNumber}
# Body: { "comments": "[AI-generated description]" }

# Dealer Inspire (Cars Commerce):
# 1. Obtain SFTP credentials from Dealer Inspire rep
# 2. Push updated inventory CSV with description column to SFTP
# 3. Dealer Inspire processes on 4-hour cycle

# DealerOn:
# 1. Use DealerOn's Inventory Manager API
# 2. PATCH /api/v1/vehicles/{vin}/description

# === CRM Integration (for trade-in summaries & financing explanations) ===

# DriveCentric:
# POST https://api.drivecentric.com/v1/communications/email
# Body: { "contactId": "[ID]", "subject": "Your Trade-In Appraisal Summary",
#         "htmlBody": "[AI-generated HTML content]" }

# AutoRaptor:
# POST https://app.autoraptor.com/api/v1/leads/{leadId}/emails
# Body: { "subject": "...", "body": "..." }

# VinSolutions:
# Use VinSolutions Workflow API to create follow-up action with email content

# === Compliance Audit Log ===
# All generated content is also saved to a compliance log:
# In n8n, add a Google Sheets or database write node at end of each workflow
# Columns: timestamp, vin/stockNumber, contentType, promptVersion,
#          aiModel, outputText, reviewedBy, approvedTimestamp
# Retain for minimum 24 months per FTC CARS Rule
Note

StoryBuilder handles syndication to AutoTrader, Cars.com, CarGurus, and other marketplaces automatically—you do not need to build custom integrations for those channels. The custom pipeline output (trade-in summaries, financing explanations) routes primarily through the CRM for customer-facing communications. The compliance audit log is mandatory—use Google Sheets for simplicity or a PostgreSQL table on the n8n server for better scalability. Ensure the log captures the exact AI-generated text, the prompt version used, and the human reviewer's name and approval timestamp.

Step 10: Configure Photo Enhancement Pipeline

Set up Spyne AI for automated vehicle photography enhancement. Photos captured using the Ricoh Theta SC2 (interiors) and iPhone (exteriors) are uploaded to Spyne, which removes backgrounds, enhances quality, and produces marketplace-ready images that pair with AI-generated descriptions.

1
Sign up for Spyne AI at https://www.spyne.ai/dealer
2
Select the Dealer plan ($350/month)
3
Download the Spyne mobile app on the dealership's dedicated iPhone — iOS: App Store > Search 'Spyne AI' — Configure with dealership account credentials
4
Configure Spyne settings: a. Background template: Select from showroom/outdoor presets or upload custom | b. Image dimensions: 1920x1080 (standard for marketplace listings) | c. Auto-enhance: Enable (brightness, contrast, white balance) | d. Number plates: Enable auto-blur for privacy
5
Set up Spyne -> Website feed: In Spyne dashboard: Settings > Integrations — Connect to dealer website platform (Dealer.com, DealerOn, etc.) — Match by VIN or stock number
6
Configure Ricoh Theta SC2: Connect to dealership WiFi — Install Ricoh Theta app on the dedicated iPhone — Set capture mode: HDR 360° still image — Resolution: Maximum (6720 x 3360) — Upload completed 360° images to Spyne via app integration
7
Establish photo capture SOP for lot staff: Minimum 16 exterior angles per vehicle (Spyne guided shooting) — 1x 360° interior capture with Ricoh Theta — Upload immediately after capture — Target: All new arrivals photographed within 24 hours of stock-in
Note

Spyne AI dramatically reduces the cost of professional-quality vehicle photos—replacing traditional $30-50/vehicle photography services. The guided shooting feature on the mobile app ensures consistent quality even with untrained lot staff. The Ricoh Theta SC2 360° interiors are a significant differentiator for online listings. If the dealer already has a photo service provider (e.g., AutoUpLink, Dealer Specialties Photo), evaluate whether Spyne offers cost savings or can be positioned as complementary.

Step 11: Compliance Review & Template Approval

Conduct a formal compliance review of all AI-generated content templates with the dealership's legal counsel or compliance officer. This is a mandatory step before production deployment—particularly for financing explanations. Document approvals and create a compliance sign-off record.

1
Generate sample outputs for each content type: Run 5 diverse vehicles through StoryBuilder (sedan, SUV, truck, luxury, economy) and save output as compliance_review_listings.pdf
2
Generate sample trade-in summaries using the custom pipeline (see API call below)
3
Generate sample financing explanations using the custom pipeline (see API call below)
4
Compile all samples into a review packet
5
Schedule 1-hour review with dealership legal/compliance
6
Document all required changes in a compliance change log
7
Implement changes to prompt templates
8
Re-generate samples and obtain written sign-off
9
Store signed compliance approval in project documentation
Sample trade-in summary API call for compliance review packet
bash
curl -X POST https://n8n.yourmsp.com/webhook/trade-in-summary \
  -H 'Content-Type: application/json' \
  -H 'X-API-Key: [KEY]' \
  -d '{"customerFirstName":"Sample","vehicleYear":"2020","vehicleMake":"Toyota","vehicleModel":"Camry","vehicleTrim":"SE","mileage":45000,"condition":"Good","tradeInValue":18500,"marketComparables":"Similar vehicles in the area range from $17,800-$19,200","conditionNotes":"Minor cosmetic wear on front bumper. All mechanical systems functioning properly. Tires at 60% tread life.","dealerName":"Sample Motors"}'
Sample financing explanation API call for compliance review packet
bash
curl -X POST https://n8n.yourmsp.com/webhook/financing-explanation \
  -H 'Content-Type: application/json' \
  -H 'X-API-Key: [KEY]' \
  -d '{"customerFirstName":"Sample","vehicleYear":"2024","vehicleMake":"Honda","vehicleModel":"CR-V","vehiclePrice":35000,"downPayment":5000,"loanTermMonths":60,"aprRange":"4.9%-7.9%","monthlyPaymentEstimate":"$565-$605","lenderName":"Honda Financial Services","dealerName":"Sample Motors","stateCode":"TX"}'
Note

Do NOT skip this step. AI-generated financing content that violates TILA trigger term rules can result in regulatory action against the dealership. Common issues found during compliance review: missing APR disclosures, absent 'subject to credit approval' language, incorrect or missing state-specific disclaimers, and overly specific payment promises that could be construed as binding offers. Budget 1-2 iterations of prompt refinement after the compliance review. The dealership's F&I Manager should also review trade-in summary language for accuracy and tone.

Step 12: Production Deployment & Monitoring Setup

Deploy all workflows to production, enable real-time monitoring, set up alerting, and establish the ongoing operational rhythm. This includes creating a dashboard for the dealership to track AI content generation metrics and setting up MSP monitoring for system health.

1
Enable all n8n workflows in production mode: VIN Data Enrichment Pipeline: ACTIVE, Trade-In Appraisal Summary Generator: ACTIVE, Financing Explanation Generator: ACTIVE
2
Set up monitoring in n8n: Settings > Log Level: Warn (production), Enable execution history retention: 30 days, Configure error workflow: Send email to msp-alerts@yourmsp.com on any failure
3
Create MSP monitoring dashboard: Track: workflows executed/day, API costs, error rate, avg generation time. Use n8n's built-in execution statistics or connect to Grafana
4
Set up OpenAI usage monitoring: Enable usage tracking per API key, Set up weekly cost report email
5
Create dealer-facing metrics dashboard (Google Sheets or simple web page): Vehicles with AI descriptions: [count] / [total inventory], Trade-in summaries generated this month: [count], Financing explanations generated this month: [count], Avg generation time: [seconds], Content pending review: [count]
6
StoryBuilder monitoring: Verify all inventory has descriptions in Dealer Specialties portal, Check syndication status to marketplaces, Confirm auto-regeneration is cycling every 5-7 days
Note

Run in shadow mode for the first week—generate content but have staff manually compare it against their current descriptions before publishing. This builds trust and catches any edge cases. Monitor API costs closely during the first month to establish baseline usage patterns. Set up a weekly MSP review during the first month, then transition to monthly reviews.

Custom AI Components

Vehicle Listing Description Prompt

Type: prompt System and user prompt pair for generating vehicle listing descriptions using GPT-5.4 mini. This is a backup/supplement to StoryBuilder for cases where the dealer wants custom descriptions with a different voice or for vehicles that StoryBuilder doesn't fully capture (e.g., specialty vehicles, modified trucks, classic cars).

Implementation:

System Prompt

You are an expert automotive copywriter for {{dealerName}}, a {{dealerType}} dealership located in {{city}}, {{state}}. Your job is to write compelling, accurate, and SEO-optimized vehicle listing descriptions. RULES: 1. Write in a {{brandVoice}} tone. (Options: Professional, Friendly, Luxury, Value-Focused) 2. Always lead with the vehicle's most compelling selling point. 3. Highlight the top 5 features that buyers in this segment care about most. 4. Include the vehicle's key specifications naturally within the description (engine, transmission, drivetrain, fuel type). 5. Mention the exterior and interior colors. 6. If mileage is under 15,000/year average, call it out as low mileage. 7. If the vehicle is certified pre-owned, mention the warranty coverage. 8. NEVER fabricate features or specifications not provided in the input data. 9. NEVER include specific pricing, monthly payments, or financing terms in the listing description. 10. NEVER write fake customer quotes or testimonial-style language (FTC violation). 11. End with a call to action inviting the customer to schedule a test drive or contact the dealership. 12. Target length: 150-250 words. 13. Use paragraph format, not bullet points, for marketplace compatibility. 14. Include 2-3 relevant long-tail keywords naturally (e.g., 'fuel-efficient family SUV in [city]'). IMPORTANT COMPLIANCE: - Do NOT include any language that could be construed as a consumer review or testimonial. - Do NOT make unverifiable claims (e.g., 'best in class' without citing source). - Do NOT include discriminatory language regarding financing eligibility.
Sonnet 4.6

User Prompt Template

Write a vehicle listing description for the following vehicle: Year: {{year}} Make: {{make}} Model: {{model}} Trim: {{trim}} Mileage: {{mileage}} miles Exterior Color: {{exteriorColor}} Interior Color: {{interiorColor}} Engine: {{engine}} Transmission: {{transmission}} Drivetrain: {{drivetrain}} Fuel Type: {{fuelType}} Body Style: {{bodyClass}} Condition: {{condition}} Certified Pre-Owned: {{cpo}} Key Features: {{features}} Vehicle History: {{historyNotes}} Dealership: {{dealerName}} in {{city}}, {{state}}
Sonnet 4.6
Model Settings
json
MODEL SETTINGS:
- Model: gpt-5.4-mini
- Temperature: 0.6
- Max Tokens: 500
- Top P: 1.0
- Frequency Penalty: 0.3 (reduces repetitive phrasing across listings)
- Presence Penalty: 0.1

Trade-In Appraisal Summary Prompt

Type: prompt System and user prompt pair for generating professional trade-in appraisal summary narratives. These summaries are customer-facing documents that explain how the dealership arrived at a trade-in value, building transparency and trust. The prompt is designed to NEVER include customer PII beyond first name.

Trade-In Appraisal Summary — System Prompt

SYSTEM PROMPT: --- You are a professional automotive appraisal specialist writing trade-in value summaries for {{dealerName}}. Your summaries are sent directly to customers to explain their vehicle's appraised trade-in value in clear, professional, and empathetic language. RULES: 1. Address the customer by first name only. 2. Open with a thank-you for bringing their vehicle in for appraisal. 3. Clearly state the appraised trade-in value. 4. Explain the key factors that influenced the valuation: a. Current market conditions for this make/model b. Vehicle mileage relative to age c. Overall condition assessment d. Any specific condition notes provided e. Comparable vehicles in the local market 5. Frame the value positively—even if it's lower than the customer expected, emphasize the positives first. 6. Use professional, empathetic language—never condescending or dismissive. 7. Include a brief explanation that trade-in values are based on wholesale market conditions and may differ from retail listings. 8. End with next steps: invite them to discuss the appraisal or proceed with their trade-in. 9. Target length: 200-350 words. 10. NEVER mention or reference any customer financial information (credit score, income, debts). 11. NEVER guarantee that the appraisal value won't change (values are typically valid for 7 days). 12. Include a note that the appraisal is valid for {{appraisalValidDays}} days subject to re-inspection. TONE: Professional, transparent, and customer-friendly. Think of a knowledgeable friend explaining the car market. COMPLIANCE: - Do NOT include any Nonpublic Personal Information (NPI) per FTC Safeguards Rule. - Do NOT make promises about future values or market trends. - The appraisal summary is informational, not a binding purchase offer unless otherwise stated by dealer policy. ---
Sonnet 4.6

Trade-In Appraisal Summary — User Prompt Template

USER PROMPT TEMPLATE: --- Generate a trade-in appraisal summary with the following information: Customer First Name: {{customerFirstName}} Vehicle: {{vehicleYear}} {{vehicleMake}} {{vehicleModel}} {{vehicleTrim}} Mileage: {{mileage}} miles Overall Condition: {{condition}} Appraised Trade-In Value: ${{tradeInValue}} Market Context: {{marketComparables}} Condition Notes: {{conditionNotes}} Dealership: {{dealerName}} Appraisal Valid For: 7 days from today ---
Sonnet 4.6
Recommended model settings for the trade-in appraisal summary prompt
yaml
MODEL SETTINGS:
- Model: gpt-5.4-mini
- Temperature: 0.4
- Max Tokens: 800
- Top P: 1.0
- Frequency Penalty: 0.2
- Presence Penalty: 0.1

Financing Option Explanation Prompt

Type: prompt System and user prompt pair for generating clear, TILA-aware explanations of financing options. This is the highest-compliance-risk component. The prompt embeds mandatory disclaimer language and is designed to produce educational explanations, NOT binding financing offers. All output requires human review before customer delivery.

SYSTEM PROMPT

You are a finance education specialist for {{dealerName}}. Your role is to write clear, easy-to-understand explanations of vehicle financing options for customers. You are NOT making loan offers—you are helping customers understand the financing options that may be available to them. CRITICAL COMPLIANCE RULES: 1. EVERY explanation must clearly state: 'This is an illustrative estimate for educational purposes only and does not constitute a binding loan offer. Final terms are subject to credit approval and may vary.' 2. NEVER state a specific APR as definitive—always present as a range or estimate: 'estimated APR range of X%-Y%' 3. NEVER reference the customer's credit score, credit history, income, or any personal financial information. 4. If a monthly payment estimate is provided, always note: 'Estimated monthly payment of $X-$Y based on the terms described. Actual payment may vary based on final credit terms, taxes, fees, and optional products.' 5. ALWAYS include Truth in Lending context: explain what APR means, what the total amount financed would be, and approximately how much total interest would be paid over the life of the loan. 6. When mentioning a down payment, note that it reduces both the amount financed and the monthly payment. 7. ALWAYS mention that the customer may obtain financing from a source of their own choice and is not required to finance through the dealership. 8. Explain different term lengths (36, 48, 60, 72 months) and the tradeoff between lower monthly payments and higher total interest cost. 9. Mention that GAP coverage and extended warranties are optional add-ons, not requirements for financing. 10. Target length: 250-400 words. 11. Use simple, jargon-free language—assume the reader has no financial background. 12. Structure with clear sections: Overview, Payment Estimate, What This Means, Next Steps. TONE: Helpful, educational, transparent. Like a trusted financial advisor explaining options. FORBIDDEN PHRASES: - 'Guaranteed approval' - 'Everyone is approved' - 'No credit check' - 'Buy here pay here' (unless that is literally the dealer's model) - 'Your payment will be exactly...' - Any language implying a specific person's creditworthiness
Sonnet 4.6

USER PROMPT TEMPLATE

Write a financing option explanation for the following scenario: Customer First Name: {{customerFirstName}} Vehicle: {{vehicleYear}} {{vehicleMake}} {{vehicleModel}} Vehicle Price: ${{vehiclePrice}} Down Payment: ${{downPayment}} Loan Term: {{loanTermMonths}} months Estimated APR Range: {{aprRange}} Estimated Monthly Payment Range: {{monthlyPaymentEstimate}} Lender: {{lenderName}} Dealership: {{dealerName}} State: {{stateCode}} Additional State Disclaimer: {{stateDisclaimer}}
Sonnet 4.6
Note

MANDATORY STATIC FOOTER (appended AFTER AI generation, not AI-generated): DISCLOSURE: The information above is provided for educational and illustrative purposes only. It does not constitute a loan offer, commitment to lend, or guarantee of credit terms. All financing is subject to credit approval by the lending institution. Actual Annual Percentage Rate (APR), monthly payment, and total cost will be determined based on your individual credit profile, the final negotiated vehicle price, applicable taxes and fees, and any optional products selected. You are not required to finance your purchase through the dealership and may obtain financing from any lender of your choice. {{dealerName}} | {{dealerAddress}} | {{dealerPhone}}

Model configuration settings for the financing explanation prompt
yaml
MODEL SETTINGS:
- Model: gpt-5.4-mini
- Temperature: 0.3 (lowest setting for maximum consistency on financial content)
- Max Tokens: 1000
- Top P: 0.9
- Frequency Penalty: 0.1
- Presence Penalty: 0.1

PII Firewall Middleware

Type: integration A data sanitization layer that runs before any data is sent to external AI APIs. It strips Nonpublic Personal Information (NPI) as defined by the FTC Safeguards Rule, ensuring compliance with GLBA requirements. This runs as an n8n Code node inserted before every OpenAI API call.

Implementation:

PII Firewall
javascript
// n8n Code Node. Insert before every OpenAI API call node in all workflows.

// PII Firewall - n8n Code Node (JavaScript)
// Insert this node BEFORE every OpenAI API call node in all workflows
// Purpose: Strip NPI/PII before data leaves the dealership's control boundary

const input = $input.first().json;

// Define fields that must NEVER be sent to external AI APIs
const BLOCKED_FIELDS = [
  'ssn', 'socialSecurityNumber', 'social_security',
  'driverLicense', 'drivers_license', 'dlNumber',
  'creditScore', 'credit_score', 'ficoScore', 'fico',
  'income', 'annualIncome', 'monthlyIncome',
  'employer', 'employerName', 'employerAddress',
  'bankAccount', 'accountNumber', 'routingNumber',
  'fullAddress', 'streetAddress', 'homeAddress',
  'lastName', 'last_name', 'fullName', 'full_name',
  'email', 'emailAddress', 'email_address',
  'phone', 'phoneNumber', 'cellPhone', 'homePhone',
  'dateOfBirth', 'dob', 'birthDate',
  'coSignerName', 'coBuyerName',
  'bankStatements', 'payStubs', 'taxReturns'
];

// Create sanitized copy
const sanitized = { ...input };
let strippedFields = [];

for (const field of BLOCKED_FIELDS) {
  if (sanitized[field] !== undefined) {
    strippedFields.push(field);
    delete sanitized[field];
  }
  // Also check nested objects one level deep
  for (const key of Object.keys(sanitized)) {
    if (typeof sanitized[key] === 'object' && sanitized[key] !== null) {
      if (sanitized[key][field] !== undefined) {
        strippedFields.push(`${key}.${field}`);
        delete sanitized[key][field];
      }
    }
  }
}

// Detect and redact SSN patterns (XXX-XX-XXXX) in any string field
const ssnPattern = /\b\d{3}[-\s]?\d{2}[-\s]?\d{4}\b/g;
for (const key of Object.keys(sanitized)) {
  if (typeof sanitized[key] === 'string' && ssnPattern.test(sanitized[key])) {
    sanitized[key] = sanitized[key].replace(ssnPattern, '[REDACTED]');
    strippedFields.push(`${key} (SSN pattern)`);
  }
}

// Detect and redact phone patterns in free text
const phonePattern = /\b(?:\+?1[-.])? \(?\d{3}\)?[-.] ?\d{3}[-.] ?\d{4}\b/g;
for (const key of Object.keys(sanitized)) {
  if (typeof sanitized[key] === 'string' && phonePattern.test(sanitized[key])) {
    sanitized[key] = sanitized[key].replace(phonePattern, '[REDACTED]');
    strippedFields.push(`${key} (phone pattern)`);
  }
}

// Detect and redact email patterns in free text
const emailPattern = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
for (const key of Object.keys(sanitized)) {
  if (typeof sanitized[key] === 'string' && emailPattern.test(sanitized[key])) {
    sanitized[key] = sanitized[key].replace(emailPattern, '[REDACTED]');
    strippedFields.push(`${key} (email pattern)`);
  }
}

// Log what was stripped for audit trail
sanitized._piiFirewall = {
  timestamp: new Date().toISOString(),
  fieldsStripped: strippedFields,
  totalStripped: strippedFields.length,
  status: strippedFields.length > 0 ? 'FIELDS_REMOVED' : 'CLEAN'
};

return [{ json: sanitized }];

Compliance Audit Logger

Type: workflow An n8n sub-workflow that logs every AI-generated content item to a compliance audit trail. Required for FTC CARS Rule 2-year record retention. Captures the full content, prompt version, AI model used, generation timestamp, and human reviewer information.

Implementation:

Compliance Audit Logger - n8n Workflow Specification
javascript
// Compliance Audit Logger - n8n Workflow Specification
// Trigger: Called as sub-workflow from all content generation workflows

// INPUT SCHEMA:
// {
//   contentType: 'vehicle_listing' | 'trade_in_summary' | 'financing_explanation',
//   vehicleVin: string,
//   stockNumber: string,
//   promptVersion: string (e.g., 'v1.2'),
//   aiModel: string (e.g., 'gpt-5.4-mini'),
//   temperature: number,
//   inputPrompt: string (the full prompt sent to AI),
//   outputContent: string (the full AI-generated text),
//   dealershipId: string,
//   dealershipName: string,
//   generatedAt: ISO timestamp,
//   requiresHumanReview: boolean,
//   reviewedBy: string | null,
//   reviewedAt: ISO timestamp | null,
//   approved: boolean | null,
//   modifications: string | null (description of any human edits),
//   distributionChannels: string[] (e.g., ['website', 'autotrader', 'crm_email']),
//   piiFirewallStatus: string
// }

// WORKFLOW NODES:

// Node 1: Input Validation
// Type: Code (JavaScript)
// Validates all required fields are present

// Node 2: Write to PostgreSQL
// Type: Postgres node
// Table: content_audit_log
// SQL:
// INSERT INTO content_audit_log (
//   id, content_type, vehicle_vin, stock_number, prompt_version,
//   ai_model, temperature, input_prompt, output_content,
//   dealership_id, dealership_name, generated_at,
//   requires_human_review, reviewed_by, reviewed_at,
//   approved, modifications, distribution_channels,
//   pii_firewall_status, created_at
// ) VALUES (
//   gen_random_uuid(), $1, $2, $3, $4, $5, $6, $7, $8,
//   $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, NOW()
// )

// Node 3: Google Sheets Backup (redundant storage)
// Type: Google Sheets node
// Spreadsheet: '[DealerName] AI Content Audit Log'
// Sheet: Monthly tab (auto-created)
// Append row with all fields

// Node 4: Retention Check (runs weekly via separate Schedule trigger)
// Type: Postgres node
// Purge records older than 24 months:
// DELETE FROM content_audit_log WHERE created_at < NOW() - INTERVAL '24 months'
// (Keep 24 months per FTC CARS Rule, with 30-day buffer)

// DATABASE SCHEMA (run once during setup):
// CREATE TABLE content_audit_log (
//   id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
//   content_type VARCHAR(50) NOT NULL,
//   vehicle_vin VARCHAR(17),
//   stock_number VARCHAR(20),
//   prompt_version VARCHAR(10) NOT NULL,
//   ai_model VARCHAR(50) NOT NULL,
//   temperature DECIMAL(3,2),
//   input_prompt TEXT NOT NULL,
//   output_content TEXT NOT NULL,
//   dealership_id VARCHAR(50) NOT NULL,
//   dealership_name VARCHAR(200) NOT NULL,
//   generated_at TIMESTAMPTZ NOT NULL,
//   requires_human_review BOOLEAN DEFAULT false,
//   reviewed_by VARCHAR(100),
//   reviewed_at TIMESTAMPTZ,
//   approved BOOLEAN,
//   modifications TEXT,
//   distribution_channels TEXT[],
//   pii_firewall_status VARCHAR(20),
//   created_at TIMESTAMPTZ DEFAULT NOW()
// );
// CREATE INDEX idx_audit_dealership ON content_audit_log(dealership_id);
// CREATE INDEX idx_audit_content_type ON content_audit_log(content_type);
// CREATE INDEX idx_audit_created ON content_audit_log(created_at);
// CREATE INDEX idx_audit_vin ON content_audit_log(vehicle_vin);

Content Quality Scoring Agent

Type: agent An automated quality assurance agent that evaluates AI-generated content before it is published. It checks for compliance issues, factual consistency with VIN data, readability, and brand voice alignment. Runs as a secondary AI call that scores the primary content and flags issues for human review.

Implementation:

Content Quality Scoring Agent — System Prompt

You are a quality assurance reviewer for automotive dealership content. You will be given an AI-generated piece of content along with the source vehicle data. Your job is to evaluate the content on multiple dimensions and return a structured JSON score. EVALUATION CRITERIA: 1. ACCURACY (0-10): Does the content match the provided vehicle data? Deduct points for: wrong features, fabricated specs, incorrect year/make/model 2. COMPLIANCE (0-10): Does the content follow regulatory requirements? For vehicle listings: No fake review language, no unverifiable claims For trade-in summaries: No PII, no guaranteed values, proper validity notice For financing: No specific APR promises, includes required disclaimers, mentions customer's right to choose their own lender 3. READABILITY (0-10): Is the content clear, well-structured, and appropriate for a general consumer audience? 4. BRAND_VOICE (0-10): Does it match the specified tone (Professional/Friendly/ Luxury/Value-Focused)? 5. SEO (0-10): For listings only - includes relevant keywords, appropriate length, unique phrasing? RESPONSE FORMAT (strict JSON): { "overall_score": <average of all applicable criteria>, "accuracy": {"score": <0-10>, "issues": ["list of specific issues"]}, "compliance": {"score": <0-10>, "issues": ["list of specific issues"]}, "readability": {"score": <0-10>, "issues": ["list of specific issues"]}, "brand_voice": {"score": <0-10>, "issues": ["list of specific issues"]}, "seo": {"score": <0-10>, "issues": ["list of specific issues"]}, "recommendation": "PUBLISH" | "REVIEW" | "REJECT", "summary": "Brief explanation of the recommendation" } THRESHOLDS: - PUBLISH: overall_score >= 8.0 AND compliance >= 9.0 - REVIEW: overall_score >= 6.0 OR compliance >= 7.0 - REJECT: overall_score < 6.0 OR compliance < 7.0
Sonnet 4.6

Content Quality Scoring Agent — User Prompt Template

Evaluate the following {{contentType}} content: === SOURCE DATA === {{sourceVehicleData}} === GENERATED CONTENT === {{generatedContent}} === CONTENT TYPE === {{contentType}} === TARGET BRAND VOICE === {{brandVoice}}
Sonnet 4.6
Model Settings & n8n Workflow Integration
javascript
// MODEL SETTINGS:
// Model: gpt-5.4 (use the more capable model for QA)
// Temperature: 0.1 (near-deterministic for consistent scoring)
// Max Tokens: 500
// Response Format: JSON mode enabled

// n8n WORKFLOW INTEGRATION:
// 1. After content generation node, add this as a subsequent OpenAI call
// 2. Parse the JSON response
// 3. If recommendation === 'PUBLISH': auto-distribute to channels
// 4. If recommendation === 'REVIEW': route to human review queue with issues highlighted
// 5. If recommendation === 'REJECT': log to error queue, regenerate with modified prompt
// 6. Log QA score to compliance audit trail regardless of recommendation

// COST NOTE: GPT-5.4 at ~$2.50/1M input + $10/1M output tokens
// For 300 vehicles/month: ~$1-3/month additional cost for QA scoring
// This is negligible compared to the compliance risk mitigation value

Testing & Validation

  • VIN Decode Accuracy Test: Submit 10 known VINs (mix of domestic, import, luxury, truck) to the NHTSA vPIC API endpoint via the n8n webhook and verify that year, make, model, trim, engine, and transmission are correctly extracted. Compare against actual window sticker data. Expected: 100% accuracy on core fields.
  • StoryBuilder Integration Test: Verify that 5 newly stocked vehicles in the DMS appear in Dealer Specialties StoryBuilder within 4 hours and have AI-generated descriptions. Check that descriptions include correct vehicle specifications, top features, and dealership-configured disclaimer footer text.
  • Trade-In Summary Generation Test: Submit a test trade-in appraisal request via the n8n webhook with known vehicle data (2020 Toyota Camry SE, 45,000 miles, Good condition, $18,500 value). Verify the output: (a) addresses customer by first name only, (b) states the correct trade-in value, (c) references mileage and condition, (d) includes the 7-day validity notice, (e) contains no PII, (f) is 200-350 words.
  • Financing Explanation Compliance Test: Submit a test financing explanation request with trigger terms ($35,000 vehicle, $5,000 down, 60 months, 4.9%-7.9% APR). Verify the output: (a) presents APR as a range/estimate, (b) includes 'subject to credit approval' language, (c) mentions customer's right to choose their own lender, (d) includes the mandatory static disclosure footer, (e) does NOT contain any of the forbidden phrases ('guaranteed approval', 'everyone is approved', etc.), (f) is flagged for human review (not auto-sent).
  • PII Firewall Test: Submit a test payload that intentionally includes blocked fields (SSN: 123-45-6789, email: test@test.com, phone: 555-123-4567, creditScore: 720, income: 75000) and verify that ALL PII fields are stripped before the data reaches the OpenAI API call. Check the _piiFirewall audit log shows all fields were detected and removed.
  • Content Quality Scoring Agent Test: Submit a deliberately poor-quality generated description (wrong vehicle year, includes fake testimonial language like 'Customer John says this is the best car ever', and missing compliance disclaimers) to the QA agent. Verify it returns a REJECT recommendation with specific issues cited for accuracy and compliance.
  • End-to-End Vehicle Listing Pipeline Test: Add a new vehicle to the DMS (or simulate via webhook) and track it through the complete pipeline: DMS → VIN decode → StoryBuilder description generation → website feed update → marketplace syndication. Verify the complete listing appears on the dealer's website within 8 hours with accurate AI-generated description and enhanced photos.
  • Website Feed Integration Test: Verify that AI-generated descriptions appear correctly on the dealer's website by checking 5 random vehicle detail pages (VDPs). Confirm: description is present, no HTML rendering issues, disclaimer footer visible, no truncation of text, and photos are paired correctly.
  • CRM Email Delivery Test: Trigger a test trade-in summary and financing explanation through the CRM email integration. Verify the email arrives in a test inbox with: correct formatting, dealership branding, all disclosure text visible, and no broken links or images.
  • Load Test: Submit 50 simultaneous vehicle content generation requests to the n8n pipeline and verify: (a) all 50 complete successfully, (b) average response time is under 10 seconds, (c) no API rate limit errors from OpenAI, (d) all 50 entries appear in the compliance audit log. This simulates a bulk inventory refresh scenario.
  • Compliance Audit Log Test: After running all tests above, query the PostgreSQL content_audit_log table and verify: (a) all generated content items have entries, (b) timestamps are accurate, (c) prompt versions are recorded, (d) the QA score is captured, (e) the human review status is correctly tracked for financing content.
  • Failover Test: Temporarily disable the OpenAI API key and submit a content generation request. Verify that: (a) the n8n error workflow triggers, (b) an alert email is sent to the MSP monitoring address, (c) the error is logged, (d) the system does not crash or expose error details to the dealer interface.

Client Handoff

Conduct a 2-hour on-site or video training session with the dealership's key stakeholders. Training should cover three audiences:

Internet Sales Manager / Content Manager (Primary User - 60 minutes)

  • How to review and approve AI-generated vehicle descriptions in StoryBuilder
  • How to trigger manual content regeneration for specific vehicles
  • How to review trade-in appraisal summaries in the CRM before delivery
  • How to review and approve financing explanations (human-in-the-loop workflow)
  • How to edit AI-generated content while preserving required disclaimers
  • How to flag content quality issues to the MSP
  • Walkthrough of the dealer-facing metrics dashboard

F&I Manager (Compliance Reviewer - 30 minutes)

  • Understanding the financing explanation review queue
  • What compliance elements to verify before approving (APR ranges, disclaimer presence, no forbidden phrases)
  • How to request prompt template changes through the MSP
  • Quarterly compliance audit process overview

General Manager / Dealer Principal (Executive Overview - 30 minutes)

  • ROI metrics: time saved per listing, content consistency improvements, SEO impact
  • Monthly reporting walkthrough
  • Escalation paths for issues
  • Service agreement review: what's included in the monthly managed service

Documentation to Leave Behind

1
Quick Reference Card (laminated, 1-page): Step-by-step for reviewing and approving content in each workflow
2
Compliance Checklist (1-page): What to check before approving financing explanations
3
Escalation Contact Sheet: MSP support email, phone, and SLA response times
4
System Architecture Diagram: Visual showing how data flows from DMS to published content
5
FAQ Document: Top 10 questions with answers (e.g., 'What if the AI gets a feature wrong?')
6
Login Credentials Document: All platform access credentials (sealed envelope for GM, stored in dealer's safe or password manager)

Success Criteria to Review Together

Maintenance

  • Weekly MSP Tasks (15-30 minutes): Review n8n workflow execution logs for errors or failures
  • Check OpenAI API usage and costs against baseline
  • Verify StoryBuilder auto-regeneration is cycling (descriptions refreshing every 5-7 days)
  • Review any content flagged as REJECT by the Quality Scoring Agent
  • Confirm DMS data feed is running on schedule
  • Monthly MSP Tasks (1-2 hours): Generate and send monthly report to dealer: content volume, quality scores, API costs, time savings estimate
  • Review and update prompt templates if dealer feedback indicates tone or content adjustments needed
  • Check for OpenAI model updates or deprecation notices (model versions typically get 6-12 months notice)
  • Update n8n and Docker containers
  • Verify compliance audit log data integrity and retention policy compliance
  • Test PII Firewall with a synthetic payload containing blocked fields
Update n8n and Docker containers
shell
cd /opt/n8n && docker-compose pull && docker-compose up -d
  • Quarterly MSP Tasks (2-4 hours): Comprehensive compliance audit: Review 20 random AI-generated content items across all three types against current FTC CARS Rule, TILA, and state-specific requirements
  • Update state-specific disclaimers if regulations have changed
  • Review prompt templates with dealership F&I Manager for accuracy and effectiveness
  • Benchmark AI content quality against competitors' listings
  • Evaluate new AI models (e.g., GPT-5.4 mini updates, new Claude versions) for potential quality or cost improvements
  • Review and renew vendor contracts (StoryBuilder, Spyne, DataOne)
  • Annual MSP Tasks (4-8 hours): Full system audit: security review, API key rotation, credential audit
  • Compliance recertification: Have dealership counsel re-review all AI output templates
  • Platform evaluation: Assess whether current stack is still optimal or if migration to newer platforms is warranted
  • Pricing review: Evaluate managed service pricing against costs and market rates
  • Disaster recovery test: Verify backups of n8n workflows, prompt templates, and audit logs can be restored
  • Prompt Template Retraining Triggers: FTC or state regulatory changes affecting automotive advertising or financing disclosures
  • Dealer rebranding or change in brand voice preference
  • New vehicle segment added to inventory (e.g., dealer starts selling EVs, needs EV-specific content)
  • Quality Scoring Agent flags more than 10% of content as REVIEW or REJECT in any week
  • Dealer feedback indicates recurring content quality issues
  • SLA Considerations: Content generation pipeline availability: 99.5% uptime (allows for maintenance windows)
  • Response time for pipeline errors: 4-hour acknowledgment, 24-hour resolution during business hours
  • Prompt template changes: 48-hour turnaround for non-compliance changes, same-day for compliance-critical changes
  • Compliance audit findings: 72-hour remediation for critical issues, 2-week for minor issues
  • Escalation Paths: Tier 1 (Dealership staff): Content review issues, approval questions → MSP Help Desk
  • Tier 2 (MSP technician): Pipeline failures, integration errors, prompt tuning → Senior engineer
  • Tier 3 (MSP senior engineer): API outages, DMS integration failures, security incidents → Vendor support + MSP management
  • Compliance Emergency (e.g., FTC inquiry): Immediately pause all AI content generation → MSP management + Dealership legal counsel

Alternatives

...

Full Turnkey SaaS (No Custom Pipeline)

Deploy only an automotive-specific AI content platform like Dealerslink AI Description Builder, VINCUE AI-Enhanced Description Builder, or Fullpath AI Ecosystem. Rely entirely on the vendor's built-in capabilities for all three content types (listings, trade-in summaries, financing explanations) without building any custom API pipelines. The MSP's role is limited to SaaS configuration, DMS integration, and ongoing management.

Fully Custom API Pipeline (No Automotive SaaS)

Build the entire content generation system using OpenAI or Anthropic APIs with n8n automation, without any automotive-specific SaaS platform. The MSP develops custom prompts and workflows for all three content types—vehicle listings, trade-in summaries, and financing explanations. VIN data comes from NHTSA and DataOne APIs. Distribution is handled through direct website and CRM API integrations.

Impel AI Full-Stack Solution

Deploy Impel AI (formerly SpinCar) as a comprehensive AI merchandising and customer engagement platform. Impel covers vehicle photography/360° spins, AI-generated descriptions, AI sales chat, and customer communication—far beyond just content generation. It replaces multiple point solutions with a single platform.

Anthropic Claude API Instead of OpenAI

Replace OpenAI GPT-5.4 mini with Anthropic Claude Sonnet 4.6 or Claude Haiku as the AI model powering the custom trade-in and financing content pipelines. The architecture remains identical (n8n orchestration, same prompts, same integrations), only the AI API provider changes.

Want early access to the full toolkit?