Nngroup APInngroup.com ↗
Access NN/g's full UX research catalog via API. Search articles, retrieve full content, browse by topic, list reports, and get upcoming training events.
What is the Nngroup API?
The Nielsen Norman Group API exposes 6 endpoints covering NN/g's complete catalog of UX research articles, videos, research reports, and training courses. Use search_articles to run full-text queries across the entire content library, or get_article to retrieve the full HTML body and metadata for any individual piece of content by URL slug. Topics, reports, and live training events each have dedicated listing endpoints with pagination support.
curl -X GET 'https://api.parse.bot/scraper/b15427e1-ed9d-43c5-bf29-2b707e3312f8/search_articles?page=0&type=Article&query=usability' \ -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 nngroup-com-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: NN/g UX Research API — search, browse by topic, drill into articles."""
from parse_apis.nn_g_ux_research_api import NNGroup, ContentType, ArticleNotFound
client = NNGroup()
# Search for usability content, capped at 5 items total.
for article in client.articles.search(query="usability", content_type=ContentType.ARTICLE, limit=5):
print(article.title, article.content_type, article.pub_date)
# Browse topics and drill into the first one's articles.
topic = client.topics.list(limit=1).first()
if topic:
print(f"Topic: {topic.name} ({topic.count} items)")
for item in topic.list_articles(content_type=ContentType.VIDEO, limit=3):
print(item.title, item.url)
# Fetch a single article by slug.
try:
detail = client.articles.get_by_slug(slug="articles/usability-101-introduction-to-usability")
print(detail.title, detail.url)
except ArticleNotFound as exc:
print(f"Not found: {exc.slug}")
# List research reports.
report = client.articles.list_reports(limit=1).first()
if report:
print(report.title, report.people, report.visible_topics)
print("exercised: articles.search / topics.list / topic.list_articles / articles.get_by_slug / articles.list_reports")
Full-text search across NN/g's content catalog (articles, videos, reports, courses). Returns paginated results ranked by relevance. Each item includes metadata (title, type, authors, publication date, topics) but may have an empty document_body for non-article types. Optionally filter by content type.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (0-indexed) |
| type | string | Filter results to a single content type |
| queryrequired | string | Search keyword or phrase |
{
"type": "object",
"fields": {
"page": "integer current page",
"items": "array of content objects",
"total": "integer total matching results",
"nbPages": "integer total pages"
},
"sample": {
"data": {
"page": 0,
"items": [
{
"objectID": "Video_970",
"document_url": "/videos/usability-101/",
"document_body": "",
"document_type": "Video",
"document_title": "Usability 101",
"document_people": [
"Kate Kaplan"
],
"document_pub_date": 1679677200,
"document_description": "Usability assesses how easy user interfaces are to use.",
"document_visible_topics": [
"User Testing",
"Web Usability"
]
}
],
"total": 1915,
"nbPages": 50
},
"status": "success"
}
}About the Nngroup API
Search and Content Retrieval
The search_articles endpoint accepts a required query string and returns paginated results ranked by relevance. Each result object includes title, document_type, authors, publication date, and associated topics. An optional type parameter narrows results to a specific content type (article, video, report, or course). The page parameter is 0-indexed. Non-article types may return an empty document_body in search results — use get_article with the item's slug to fetch the full body.
get_article takes a slug such as articles/usability-101-introduction-to-usability and returns document_title, document_url, document_type, and document_body as HTML. This endpoint covers the full range of NN/g content types, not just articles.
Browsing by Topic, Reports, and Events
list_all_topics returns the complete set of UX topic categories, each with a name and count of associated items. The count field tells you how much content exists per topic before you commit to a query. Feed those exact topic names into list_articles_by_topic, which also accepts an optional type filter and page parameter — topic names are case-sensitive and must match the values returned by list_all_topics exactly.
list_all_reports returns paginated research reports ordered newest first, with full body text included in the index records. list_live_courses lists upcoming live online training sessions and UX Conference events, ordered by soonest first, with pagination via the page parameter. Both return total and nbPages fields for traversing the full result set.
The Nngroup API is a managed, monitored endpoint for nngroup.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when nngroup.com 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 nngroup.com 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?+
- Build a UX knowledge base by ingesting all articles for a given topic using list_articles_by_topic with a type filter
- Monitor new NN/g research reports by polling list_all_reports and checking for items newer than a stored timestamp
- Power an internal search tool over NN/g content using search_articles with keyword queries filtered by content type
- Aggregate upcoming UX training schedules using list_live_courses to surface relevant conference events
- Retrieve full article text for summarization or LLM ingestion using get_article with a known slug
- Enumerate the full NN/g topic taxonomy via list_all_topics to map article counts across UX subject areas
- Compile a reading list tool that resolves article slugs to full HTML content via get_article
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.