Pinterest's bulk upload silently drops duplicate-link rows
A 16-row bulk pin CSV created only 2 pins because Pinterest deduplicates rows by destination link, not by image.
The symptom
I prepared a CSV with 16 rows for Pinterest’s bulk pin creation, 16 distinct images, all valid, uploaded it, and Pinterest scheduled 2 pins. There was no error and no warning about the other 14 rows. They simply did not exist after the upload.
What was happening
Pinterest’s bulk upload deduplicates by destination Link. My 16 rows had 16 unique images and pointed at only 2 unique destination URLs, so Pinterest treated every row sharing a URL as a duplicate of the first and kept one pin per unique link. That is how 16 rows collapsed to 2.
The shape of the broken file, with the repeated Link column:
Title,Media URL,Link
Pin 1,https://cdn.example.com/img01.png,https://example.com/l/thing
Pin 2,https://cdn.example.com/img02.png,https://example.com/l/thing
Pin 3,https://cdn.example.com/img03.png,https://example.com/l/thing
Same Link on every row, so Pinterest kept one and dropped the rest.
The fix
Make every row’s Link unique. The clean way is a per-pin UTM query string, which Pinterest reads as a distinct destination:
Title,Media URL,Link
Pin 1,https://cdn.example.com/img01.png,https://example.com/l/thing?utm_source=pinterest&utm_medium=pin&utm_content=pin01
Pin 2,https://cdn.example.com/img02.png,https://example.com/l/thing?utm_source=pinterest&utm_medium=pin&utm_content=pin02
Pin 3,https://cdn.example.com/img03.png,https://example.com/l/thing?utm_source=pinterest&utm_medium=pin&utm_content=pin03
Now every Link is distinct and all 16 rows survive: 16/16 scheduled. The UTM also lets you attribute clicks per pin in analytics, so you find out which image drives traffic.
While you are in there, check that the Media URL column is a publicly reachable image URL. If Pinterest cannot fetch it, that row fails too, for a different reason.
The lesson
Pinterest bulk upload deduplicates by destination link. Give every row a unique Link, which a per-pin UTM does, and the full batch goes through.
Discussion
Powered by GitHub. Sign in to leave a comment.