Juno APIjuno.co.uk ↗
Access Juno Records catalog via API: search vinyl and music products, browse genres, get new releases, bestseller charts, and full product details.
What is the Juno API?
The Juno Records API exposes 7 endpoints covering catalog search, product detail, genre browsing, new releases, bestseller charts, and autocomplete suggestions. The search_products endpoint returns up to 50 products per page with fields including artist, title, label, catalog number, format, genre, price, and image URL. Product details via get_product_detail additionally include a tracklist, text description, and gtag-sourced pricing and category data.
curl -X GET 'https://api.parse.bot/scraper/64c810a2-fe0a-4683-8207-1b49beb30fd2/search_products?page=1&query=techno' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace juno-co-uk-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Juno Records SDK — discover, browse, and inspect music products."""
from parse_apis.juno_records_api import JunoRecords, Timeframe, GenreSlug, ProductNotFound
client = JunoRecords()
# Search for products by keyword, capped at 5 results
for product in client.products.search(query="aphex twin", limit=5):
print(product.artist, product.title, product.price)
# Browse a genre using the enum
for product in client.products.browse_genre(genre_slug=GenreSlug.TECHNO, timeframe=Timeframe.THIS_WEEK, limit=3):
print(product.title, product.label, product.format)
# Drill into one product's full detail via the sub-resource navigation
top_hit = client.products.bestsellers(timeframe=Timeframe.THIS_WEEK, limit=1).first()
if top_hit:
detail = top_hit.details()
print(detail.details.artist, detail.details.title, detail.details.price, detail.details.currency)
print(detail.metadata.genre, detail.metadata.format)
for track in detail.tracklist[:3]:
print(track.side, track.number, track.title, track.duration)
# Autocomplete suggestions
for suggestion in client.suggestions.search(query="daft", limit=5):
print(suggestion.label, suggestion.category)
# Typed error handling
try:
bad = client.products.search(query="zzzznonexistent999", limit=1).first()
if bad:
bad.details()
except ProductNotFound as exc:
print(f"Product not found: {exc.url}")
print("exercised: products.search / products.browse_genre / products.bestsellers / product.details / suggestions.search")Full-text search over Juno Records' catalog. Returns a paginated list of up to 50 products per page matching the query keyword against artist, title, and label fields. Pagination advances via the page parameter; results include artist, title, label, price, format, and product URL.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| queryrequired | string | Search keyword (e.g. 'techno', 'aphex twin'). |
{
"type": "object",
"fields": {
"count": "integer, number of items returned on this page",
"items": "array of product objects with product_id, artist, title, label, catalog_number, format, genre, price, status, url, and image_url",
"summary": "string, pagination summary text from the site"
},
"sample": {
"data": {
"count": 50,
"items": [
{
"url": "https://www.juno.co.uk/products/talla-2xlc-yakooza-techno-club-retro-vol-2-vinyl/1139098-01/",
"genre": "Techno",
"label": "Techno Club Germany",
"price": "$30.12",
"title": "Techno Club Retro Vol 2",
"artist": "TALLA 2XLC",
"format": "coloured vinyl 12\"",
"status": "FORTHCOMING",
"image_url": "https://imagescdn.juno.co.uk/300/CS1139098-01A-MED.jpg",
"product_id": "1139098-1",
"catalog_number": "TCR 210011."
}
],
"summary": ""
},
"status": "success"
}
}About the Juno API
Catalog Search and Product Data
The search_products endpoint accepts a required query string — artist name, title, or label — and an optional page integer for pagination. Each result object includes product_id, artist, title, label, catalog_number, format, genre, price, status, url, and image_url. For deeper product information, get_product_detail accepts a Juno URL path or full URL (obtainable from search results) and returns a details object with artist, title, id, price, currency, and category, a metadata map covering fields like format, cat, and genre, a tracklist array with side, number, title, and duration per track, and a description string.
Genre Browsing and Timeframe Filtering
The browse_genre endpoint takes a genre_slug matching Juno's URL structure — techno, house, drum-n-bass, disco-nu-disco, and others — with an optional timeframe parameter accepting today, this-week, eight-weeks, back-cat, or preorders. get_new_releases applies the same timeframe filter across all genres and can return a mix of music, DJ equipment, and accessories depending on stock. get_all_vinyl_products browses the full vinyl catalogue without a keyword and adds a barcode field and release_date to each item; the barcode is returned as an empty string when not available.
Charts and Autocomplete
get_bestsellers returns top-selling products filtered by today or this-week, paginated with a summary string describing the result window (e.g. "Items 1 to 50 of 200"). search_autocomplete accepts a query prefix and returns suggestion objects with label, category (e.g. Artists, Products, Labels), and url, which is useful for building type-ahead interfaces or resolving entity URLs before calling get_product_detail.
The Juno API is a managed, monitored endpoint for juno.co.uk — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when juno.co.uk changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official juno.co.uk API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate daily Juno bestseller charts to track trending vinyl releases by genre
- Build a vinyl catalogue browser filtered by genre slug and timeframe using browse_genre
- Power a music discovery app with new-release feeds from get_new_releases
- Implement type-ahead search in a record store interface using search_autocomplete suggestions
- Populate product pages with tracklists, descriptions, and catalog numbers via get_product_detail
- Monitor price changes on specific releases by polling get_product_detail for a set of product URLs
- Compile label discographies by running search_products queries filtered by label name
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.