Setting One Price Across Adobe, Vecteezy And Dreamstime: The Metadata Tradeoffs Nobody Mentions
Description and use
Automating uploads to Adobe Stock, Vecteezy, and Dreamstime requires separate CSVs with different headers. The make_metadata.py and upload_tracker.py scripts generate the required formats and prevent duplicates, ensuring a single price list and compliance with AI disclosure rules.
Problem
Uploading the same vector files to Adobe Stock, Vecteezy, and Dreamstime using a single CSV fails because each platform requires a different header format and metadata constraints, leading to rejections, duplicate posts, and inconsistent pricing.
Outcome
The new workflow eliminates CSV header mismatches, prevents duplicate uploads, ensures consistent pricing, and complies with AI disclosure rules, allowing the author to focus on creating art instead of fixing rejections.
Workflow
- 1. Store raw assets in assets/ folder.
- 2. Run make_metadata.py to generate three CSVs: Adobe (5 columns), Vecteezy (4 columns), Dreamstime (15 columns).
- 3. Use upload_tracker.py to record completed uploads and filter pending items.
- 4. Upload each platform’s CSV and assets via their dashboards.
- 5. Track pricing and AI disclosure in a ledger for margin calculation.
- 6. Package final products into zips with thumbnails and covers using Pillow and reportlab.
Evidence
Adobe rejected the whole batch in about four minutes. Vecteezy flagged a duplicate-content warning on the same files Dreamstime accepted.
Adobe Stock wants a 5-column CSV. Vecteezy wants 4 columns. Dreamstime wants 15.
The script uses the Python standard library alone, no installs, which matters when you are running on a small box.
The fix is dumb and effective: a ledger. upload_tracker.py keeps a plain text record of every asset marked done.
- Record date: 2026-10-19T11:56:05.359Z