Vistaprint Products Scraper

A print catalogue that
has no single price.

Vistaprint sells printing by the quantity - fifty business cards, then a hundred, then five hundred, each at its own rate. So a product page publishes a name, a SKU, a rating and a description, and no price at all. This scraper returns the seventeen columns; six of them come back empty, and we would rather tell you which before you sign up than after.

one-time 500 free rowsthen $0.002 per roweleven columns populated, six emptyCSV · JSON · Excel
How it works

A list of URLs in, a spreadsheet out.

  1. STEP 1Sign in to the platform.
  2. STEP 2Open the Vistaprint Products Scraper.
  3. STEP 3Paste the Vistaprint product URLs you want, one per line - not category or search pages.
  4. STEP 4Choose your output format (CSV / JSON / XLSX).
  5. STEP 5Run the job.
  6. STEP 6Download the results - one row per URL, seventeen columns.
What to expect

The things worth knowing before you run it.

The price columns come back empty

On both of the runs that returned real Vistaprint rows, price, parsed_price, currency and availability were all empty. This is not a gap in the scraper. Fetch a product page and read its structured data: the Product block carries name, description, SKU, MPN and brand, and there is no offers node and no price anywhere in it. Vistaprint quotes by quantity and finish, so the page has no one number to put in a cell.

What it does return is identity

Name, brand, SKU, rating, description and image URLs came back populated on every real product row. That is enough to match a Vistaprint item against your own catalogue, to track which products exist and how they are described, and to pull artwork - it is just not enough to build a price comparison.

Give it product pages, not category or search pages

We have the evidence both ways. A product URL returned a full row. The category page one level up returned no product data found, and a /search?q=… URL returned status: ok with name reading "Search Results" and every other field empty - a page title, not a product. Vistaprint's own robots.txt also disallows /search for all crawlers.

Vistaprint pushes back on some requests

Of the eight runs we hold, three came back blocked (needs residential proxy). One of those was the same business-cards URL that succeeded eight days later. So blocking is real and it is intermittent; we are not going to quote you a success rate from eight runs, and you should build retry into any schedule.

Do not split the images field on commas

image and images held the same value on both real rows, and that value is a Cloudinary transform URL - c_scale,dpr_auto,f_auto,q_auto:best and so on. The commas belong to the URL. Splitting on them produces fragments that resolve to nothing. One of our two rows carried a 1,697-character image URL, so give the column room.

Every row says what happened

The last column is status, written by our exporter rather than by the site. Across our eight runs it took four distinct values - ok, blocked (needs residential proxy), no product data found and http 404 - so a row that failed still arrives, carrying the reason.

What you get back

Seventeen columns, eleven of them populated.

Read from the header row of a real export, in sheet order. Where we observed a column carry a value, this says what the value looked like. Where we observed it empty on every row, it says that instead.

query
The Vistaprint URL you submitted, echoed on every row so an export covering many products stays separable. On all of our rows this matched url exactly.
sku_code
The product code. On both real rows this was identical to sku, in the form PRD- followed by eight alphanumerics. Two identifier columns, one value - pick either, but check both if you are joining, because they are filled independently in this schema family.
product_url
Intended to carry the canonical product page. Use url instead.
name
The product title as the page states it - "Standard Business Cards" on one of our rows, "VistaPrint® Printed Baseball Cap" on the other. Note the registered-trademark sign: it is in the source and it survives into the cell.
description
The page's marketing description, around 150–180 characters on our rows. Worth reading rather than discarding: on the business-cards row the only pricing information anywhere in the record was a phrase inside this text, not a number in a price column.
parsed_price
Intended to carry the price as a bare number. See the note below the table.
price
Intended to carry the price as displayed.
currency
Intended to carry the currency the price is quoted in.
availability
Intended to carry stock status. Print-to-order goods do not carry a stock state the way stocked goods do.
rating
The average rating, and one of the fields that does come back - "4.7" and "4.3" on our two rows. It arrives as a string, not a number, so cast it before you sort on it.
reviews
Intended to carry the number of reviews. Empty on both real rows, even though the product page's own structured data does publish a review count alongside the rating. We are recording that as a gap rather than explaining it away.
images
Every image the page carries. On both real rows this was identical to image. Do not split it on commas - the commas are part of the Cloudinary transform.
brand
The manufacturer or brand. "Vistaprint" on both of our rows, which is what you would expect from a own-brand print shop; treat a different value as informative rather than as an error.
sku
The item number. Identical to sku_code on both real rows, and the most useful join key in the record - it is the value the product page's structured data publishes as its SKU.
url
The address the row was produced from. Equal to query on every row we hold, which tells you these requests were served without redirecting.
image
The primary image on its own. A Cloudinary URL on cms.cloudinary.vpsvc.com wrapping a rendered preview from rendering.documents.cimpress.io - the artwork is generated on request rather than stored as a photograph. One of ours ran to 1,697 characters, so a fixed-width column will truncate it.
status
A per-row flag written by our exporter, not by Vistaprint. Across our eight runs it took four values: ok, blocked (needs residential proxy), no product data found and http 404. Reconcile on this column rather than on row count.

Seventeen columns per row · CSV, JSON or Excel

Why the four price columns are empty, stated plainly. We hold eight runs; two returned real Vistaprint product rows, and on both of them price, parsed_price, currency and availability were empty strings. That is not a scraper defect. Fetching either product page directly returns roughly 745–843 KB of server-rendered HTML whose ld+json holds a Product block with name, description, SKU, MPN and brand - and no offers node and no price of any kind. Vistaprint quotes by quantity, material and finish, so there is no single product price for the page to publish or for us to read. The rating and SKU in that same structured data match our export exactly, which is how we know the rows are genuine rather than a parsing accident. If your work needs Vistaprint pricing, this service will not supply it, and no configuration of it will.

Common workflows

What identity data is good for.

Catalogue matching

Line your records up against theirs

sku arrives in a clean PRD- form and is the same value the product page publishes as its SKU, which makes it a dependable join key. Pair it with name and brand and you can reconcile a list of Vistaprint items against your own without matching on prose.

Ecommerce ops · Catalogue
Assortment tracking

Watch what exists, not what it costs

Run a set of product URLs on a schedule and keep name, description and rating with the run date. Products get renamed, repositioned and re-described far more often than anyone announces, and the series shows it.

Category research · Assortment
Artwork and copy

Pull the description and the rendered image

description and image come back populated. The image is a live Cloudinary render rather than a stored photograph, so treat the URL as the artefact and fetch it when you need the file.

Content · Enrichment
Rating snapshots

Track the rating over time

rating is one of the fields that reliably arrives. It is a string, so cast it first. Remember that reviews comes back empty, so you have the score without the sample size behind it - enough for a trend line, not enough to rank products against each other.

Product research · Reviews
Pricing

Pay only for what you actually use.

Free tier

First 500 rows are free

One time, on signup. No card, and nothing to cancel afterwards.

One-time, on signup
Rate

then $0.002 per row

Billed on rows actually returned. A row that comes back with a status other than a successful one is not a row of product data, and is not charged as one.

Billed on rows returned
No subscription

Nothing recurring

Credits do not expire on a monthly cycle. Run a catalogue sweep in March and nothing until September if that is the shape of the work.

No monthly expiry
10% off your first paid run.Use code LIVESCRAPER10 at checkout.
Register
Pairs well with

Other catalogues, the same seventeen columns.

The legal bit

Is it legal to scrape Vistaprint?

Product facts on a publicly reachable page are ordinary competitive information. The caveats worth naming here are about which pages you ask for and what you do with the artwork.

A product name, a brand, a SKU and a rating are facts about goods offered for sale. Reading them from a page served to any visitor is the same activity a buyer performs by hand, at a useful speed. Nothing in the seventeen columns describes a person: no name, no email address, no phone number, no account - so the data-protection questions that shape our people-facing services do not arise here.

Two caveats are specific to this site. First, which pages you ask for: Vistaprint's robots.txt carries no blanket Disallow: / for general crawlers, and the product paths we tested are not disallowed - but /search is, for every user agent. That matters because a search URL appears in the published example inputs for this service, and one of our own runs submitted one. It came back with a page title and no product anyway, so the advice and the courtesy point the same way: submit product URLs. Second, the artwork: the image field resolves to a rendered preview generated by Vistaprint's own pipeline, and those renders and the descriptions beside them are someone's copyrighted work. Using them internally to match, enrich or monitor a catalogue is ordinary practice; republishing them as your own is a different question with a different answer.

Our own terms are the same as on every other service here. Publicly available pages only, nothing behind a login, no third-party trackers on the data layer, and exports auto-delete after 30 days. Your first 500 rows are free and need no credit card.

livescraper.app · what shapes a run
One product URL per row
Product pages, not category or search pages
No price data - the page publishes none
Anonymous access only
Exports auto-delete after 30 days
The one thing this service cannot give you is a Vistaprint price, and that is a property of the source rather than of the scraper.
Common questions

What people ask before signing up.

Does the export include Vistaprint prices?+
No. On both of the runs that returned real product rows, price, parsed_price, currency and availability were empty. The reason is in the source: fetch a Vistaprint product page and its structured data holds a Product block with name, description, SKU, MPN and brand, and no offers node and no price at all. Vistaprint quotes by quantity and finish, so there is no single price on the page. No setting will change this.
Which columns actually come back populated?+
Eleven of the seventeen, on the real rows we hold: query, name, brand, sku, sku_code, rating, url, description, image, images and status. The six that were empty on every row are price, parsed_price, currency, availability, reviews and product_url.
What columns does the export contain?+
Seventeen, in this order: query, sku_code, product_url, name, description, parsed_price, price, currency, availability, rating, reviews, images, brand, sku, url, image and status. One row per product URL you submit.
Can I submit a category page or a search URL?+
You can, but it will not give you products. A category page in our runs returned no product data found, and a /search?q=… URL returned status: ok with name reading "Search Results" and every other field empty. Vistaprint's robots.txt also disallows /search for all crawlers. Submit product URLs.
Will my requests get blocked?+
Sometimes. Three of the eight runs we hold came back blocked (needs residential proxy), and one of those was the same URL that succeeded eight days later. Eight runs is far too small a sample to quote a success rate from, so we will not - but plan for retries rather than assuming a clean pass.
Why are sku and sku_code the same, and image and images too?+
On both of our real rows they held identical values - PRD- plus eight alphanumerics for the identifier, and one Cloudinary URL for the image. The schema keeps the pairs because it is shared with other catalogues where the two halves differ, so check both before you choose a join key. One warning: images contains commas that belong to the Cloudinary transform, so splitting that field on a comma will break the URL.
What does the status column mean?+
It is written by our exporter, not by Vistaprint, and reports whether that row was retrieved. Across our eight runs it took four values: ok, blocked (needs residential proxy), no product data found and http 404. A failed row still arrives carrying its reason, so you can reconcile against your input list.
How much does it cost?+
Your first 500 rows are free, one time, no card. After that it is $0.002 per row, billed on rows actually returned, with no subscription and no monthly expiry on credits.
What formats can I export?+
CSV, JSON or Excel. The seventeen columns and their order are the same in all three.

Get the catalogue as a table.

Name, brand, SKU, rating, description and images for every product URL you submit - and an honest empty cell where Vistaprint publishes no price. Your first 500 rows are free, then $0.002 each.

Activates instantly · no card required

Scrape Vistaprint product data

Vistaprint sells customised print and promotional goods - business cards, flyers, signage, branded clothing and bags - to small businesses, and it sells them by the quantity. That commercial model is the single most important thing to understand before you scrape it, because it decides what a product page can and cannot tell you. Fifty business cards, two hundred, a thousand, on one stock or another, with one finish or another, are all different prices for one product. There is therefore no single price on the page.

That is not a guess. Both of the runs behind this page that returned real Vistaprint rows came back with price, parsed_price, currency and availability empty, and fetching the same two product pages directly explains why: each returns roughly 745–843 KB of server-rendered HTML - this is not a JavaScript shell, unlike some catalogues in this family - whose ld+json carries a Product block with name, description, SKU, MPN and brand, and no offers node and no price anywhere in it. The rating and SKU published in that structured data match our export exactly, which is how we know the rows are genuine and the empty cells are the source's rather than ours.

What does come back is identity. Across the real rows we hold, eleven of the seventeen columns were populated: the submitted URL, the product name, the brand, both identifier fields, the rating, the resolved URL, the description, both image fields and the status. The identifier arrives as PRD- followed by eight alphanumerics and matches what the page's own structured data calls its SKU, which makes it a dependable join key against your records. The image is a Cloudinary URL wrapping a preview rendered on request rather than a stored photograph, and one of ours ran to 1,697 characters - long enough to truncate in a fixed-width column, and carrying commas inside the transform that will corrupt the URL if you split the field on them.

Two practical cautions. Submit product URLs: in our runs a category page returned no product data found and a search URL returned a row whose name read "Search Results" with everything else empty, and Vistaprint's robots.txt disallows /search for all crawlers, so the courteous path and the useful path agree. And expect intermittent blocking: three of our eight runs returned blocked (needs residential proxy), including one on a URL that succeeded eight days later. Eight runs is too small a sample to quote a success rate from, so we do not quote one - build in retries instead. Publicly available pages only, no third-party trackers on the data layer, and exports auto-delete after 30 days. Your first 500 rows are free and need no credit card.