MoneySavingExpert APImoneysavingexpert.com ↗
Access MoneySavingExpert forum data via API: categories, discussions, comments, search, and MSE news across mortgages, banking, and savings topics.
What is the MoneySavingExpert API?
The MoneySavingExpert API provides 9 endpoints for reading forum data from moneysavingexpert.com, covering categories, paginated discussions, per-thread comments, and keyword search. The get_discussion_details endpoint returns full thread metadata alongside up to 50 comments per discussion, while dedicated endpoints for mortgages, banking, savings, and MSE news let you pull topic-specific threads without filtering manually.
curl -X GET 'https://api.parse.bot/scraper/0562cc27-5751-430a-8896-99d5c51183cb/get_forum_categories?page=1&limit=100' \ -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 moneysavingexpert-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: MoneySavingExpert Forum API — browse categories, search discussions, read comments."""
from parse_apis.moneysavingexpert_forum_api import MoneySavingExpert, CategoryId, DiscussionNotFound
client = MoneySavingExpert()
# List forum categories to see what topics are available
for category in client.categories.list(limit=5):
print(category.name, f"({category.count_discussions} discussions)")
# Search for discussions about mortgages
discussion = client.discussions.search(query="mortgage rates", limit=1).first()
if discussion:
print(discussion.name, discussion.date_inserted, discussion.count_comments)
# Drill into the discussion's comments
for comment in discussion.comments.list(limit=3):
print(comment.insert_user, comment.body[:80])
# Browse mortgage discussions via the dedicated listing
for post in client.discussions.list_mortgages(limit=3):
print(post.name, post.count_views)
# Construct a category by ID and browse its discussions
credit_cards = client.category(category_id=11)
for post in credit_cards.discussions.list(limit=3):
print(post.name, post.count_views)
# Typed error handling: catch a missing discussion
try:
detail = client.discussions.get(discussion_id=999999999)
print(detail.name)
except DiscussionNotFound as exc:
print(f"Discussion not found: {exc.discussion_id}")
print("exercised: categories.list / discussions.search / comments.list / discussions.list_mortgages / category().discussions.list / discussions.get")
Lists all forum categories with descriptions and stats. Each category has a unique categoryID, name, description, URL, and counts of discussions and comments. Returns a flat list of all categories regardless of hierarchy depth.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| limit | integer | Max categories per page. |
{
"type": "object",
"fields": {
"items": "array of category objects with categoryID, name, description, url, countDiscussions, countComments"
},
"sample": {
"data": {
"items": [
{
"url": "https://forums.moneysavingexpert.com/categories/credit-cards",
"name": "Credit cards",
"categoryID": 11,
"description": "A place to discuss all things credit card-related with other MoneySavers.",
"countComments": 609650,
"countDiscussions": 80136
}
]
},
"status": "success"
}
}About the MoneySavingExpert API
Forum Categories and Discussions
The get_forum_categories endpoint lists all forum categories with categoryID, name, description, countDiscussions, and countComments. These IDs feed directly into get_category_discussions, which accepts a required category_id plus optional page and limit params and returns discussion objects including discussionID, name, body, url, dateInserted, countComments, and countViews. Well-known category IDs include 11 for Credit Cards, 15 for Mortgages, 17 for Savings, and 20 for Banking.
Topic-Specific Shortcuts
Four convenience endpoints — get_mortgage_best_buys, get_banking_deals, get_savings_deals, and get_latest_news — scope results to their respective forum sections without requiring you to look up a category_id first. All four support page and limit for pagination. The get_latest_news endpoint targets the MSE News & Blogs category and omits countViews from its response, which the other three include.
Search and Thread Details
search_forum accepts a required query string and returns matching discussions with discussionID, name, body, url, categoryID, dateInserted, and countComments. To fetch full thread content, pass the discussion_id to get_discussion_details, which returns both the discussion metadata and a comments array (up to 50 entries per call) in a single response object.
Main Site Pages
get_main_site_page fetches content from the main moneysavingexpert.com domain by accepting an optional path parameter (e.g. /savings/ or /mortgages/best-buys/). It returns the resolved url and raw content as an HTML string. Note that some paths may be blocked by Cloudflare protection, so results for this endpoint are not guaranteed on every request.
The MoneySavingExpert API is a managed, monitored endpoint for moneysavingexpert.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when moneysavingexpert.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 moneysavingexpert.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?+
- Monitor new mortgage discussion threads by polling
get_mortgage_best_buysfor changes incountCommentsor newdiscussionIDvalues. - Build a savings rate tracker that searches for specific bank names using
search_forumand surfaces threads bydateInserted. - Aggregate community sentiment on credit card products by fetching discussions in category 11 via
get_category_discussionsand readingbodytext. - Track MSE editorial coverage by pulling the latest entries from
get_latest_newsand indexingnameanddateInsertedfields. - Fetch complete Q&A threads on banking topics using
get_discussion_detailsto retrieve discussion metadata plus associated comments in one call. - Map forum category activity levels by comparing
countDiscussionsandcountCommentsacross all categories returned byget_forum_categories. - Extract structured article or guide text from the main MSE site by calling
get_main_site_pagewith specific paths like/savings/.
| 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.
Does MoneySavingExpert have an official developer API?+
How many comments does `get_discussion_details` return, and can I paginate them?+
Does the API expose user profile data for forum members?+
Is the `get_main_site_page` endpoint reliable for all MSE paths?+
Does the API cover MSE's Best Buy tables or deal alerts outside of forum discussions?+
get_mortgage_best_buys, get_banking_deals, and get_savings_deals endpoints return forum discussion threads about those topics, not the curated Best Buy comparison tables from the editorial site. You can fork this API on Parse and revise it to parse specific Best Buy table pages via get_main_site_page paths.