Moving APImoving.com ↗
Access Moving.com data via API: city demographics by zip, school reports, moving company profiles with DOT numbers, and relocation articles.
What is the Moving API?
The Moving.com API covers 6 endpoints for relocation research, returning Census-derived city statistics, school listings, and moving company profiles in a single interface. The get_city_profile endpoint delivers demographics, income, ethnicity, and residential metrics for any US zip code, each paired with a national benchmark value. Companion endpoints handle side-by-side city comparisons, school lookups, company directory search, detailed mover profiles, and paginated advice articles.
curl -X GET 'https://api.parse.bot/scraper/d53a9a2c-93c9-43fd-90c6-9ded923d2156/get_city_profile?zip_code=10001' \ -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 moving-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: Moving.com SDK — city research, school lookup, moving company discovery."""
from parse_apis.moving_com_api import Moving, Category, CompanyNotFound
client = Moving()
# Fetch city profile for a zip code — demographics, income, residential data.
profile = client.cityprofiles.get(zip_code="10001")
print(f"City {profile.zip_code}: Median Age {profile.demographics['Median Age'].value} (national: {profile.demographics['Median Age'].national})")
# Compare two cities side by side using the constructible shortcut.
comparison = client.cityprofile(zip_code="10001").compare(other_zip="60601")
for metric in comparison.demographics[:3]:
print(f" {metric.metric}: NYC={metric.city1}, Chicago={metric.city2}")
# List schools in the zip code via sub-resource navigation.
for school in profile.schools.list(limit=3):
print(f" School: {school.name} ({school.type}, {school.students} students)")
# Browse the moving company directory and drill into a detail page.
company_summary = client.movingcompanysummaries.list(limit=1).first()
if company_summary:
detail = company_summary.details()
print(f"Company: {detail.name}, BBB: {detail.bbb_rating}, DOT: {detail.dot_number}")
# Typed error handling — catch a not-found slug gracefully.
try:
client.movingcompanies.get(slug="nonexistent-company-99999")
except CompanyNotFound as exc:
print(f"Not found: {exc.slug}")
# Browse articles filtered by category.
for article in client.articles.list(category=Category.MOVING_TIPS, limit=3):
print(f" Article: {article.title} — {article.url}")
print("Exercised: cityprofiles.get / compare / schools.list / movingcompanysummaries.list / details / movingcompanies.get / articles.list")
Fetch city statistics by zip code. Returns demographics, income and jobs, ethnicity, and residential data as open maps of metric names to local/national value pairs. Each section groups related Census-derived indicators; the metric key set varies by data availability for the zip code.
| Param | Type | Description |
|---|---|---|
| zip_coderequired | string | 5-digit US zip code (e.g. 10001) |
{
"type": "object",
"fields": {
"zip_code": "the queried zip code",
"ethnicity": "object mapping metric names to {value, national} pairs",
"residential": "object mapping metric names to {value, national} pairs",
"demographics": "object mapping metric names to {value, national} pairs",
"income_and_jobs": "object mapping metric names to {value, national} pairs"
},
"sample": {
"data": {
"zip_code": "10001",
"ethnicity": {
"White": {
"value": "14,422",
"national": "12,514,949"
}
},
"residential": {
"Median House Value": {
"value": "$343,400",
"national": "$302,200"
}
},
"demographics": {
"Median Age": {
"value": "37.00",
"national": "38.50"
},
"Population": {
"value": "22,924",
"national": "19,618,453"
}
},
"income_and_jobs": {
"Median Household Income": {
"value": "$88,526",
"national": "$65,323"
}
}
},
"status": "success"
}
}About the Moving API
City and Neighborhood Data
get_city_profile accepts a 5-digit zip_code and returns four data sections — demographics, income_and_jobs, ethnicity, and residential — each structured as a map of metric names to {value, national} pairs. The national field lets you benchmark a zip against US-wide figures without a separate call. Metric availability varies by zip, so response keys are not guaranteed to be uniform across different inputs. compare_cities takes two zip codes (zip1, zip2) and returns the same four sections restructured as arrays of {metric, city1, city2} objects, making it straightforward to diff any two areas side by side.
Schools and Moving Companies
get_school_reports returns an array of schools for a given zip, with each record carrying name, address, type (public or private), students count, and rating. The array can be empty for zip codes with no registered schools. For moving companies, search_moving_companies pages through a BBB-rated directory, returning up to 15 summaries per page with name and slug. Pass a slug to get_moving_company_detail to retrieve the full profile: address, phone, website, services list, dot_number, mc_number, and bbb_rating.
Articles and Content
get_moving_articles retrieves relocation advice content with optional page and category parameters. Category values follow a hyphenated slug format (e.g. moving-tips, city-guides). Each article object contains a title and a direct url. This endpoint is useful for surfacing contextually relevant content alongside zip-level data in relocation tools.
The Moving API is a managed, monitored endpoint for moving.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when moving.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 moving.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 relocation comparison tool that shows income, ethnicity, and residential stats for two zip codes using
compare_cities - Populate a neighborhood scorecard with Census-derived local-vs-national benchmarks from
get_city_profile - Display nearby school options with ratings and student counts for a prospective homebuyer's target zip
- Integrate a vetted mover directory sorted by BBB rating into a real estate or property management platform
- Verify a moving company's DOT and MC registration numbers before recommending them to end users
- Surface category-filtered moving advice articles within a relocation onboarding flow
- Aggregate city demographic data across multiple zip codes to generate market research reports
| 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 Moving.com offer an official developer API?+
What does `get_city_profile` return, and how are values structured?+
get_city_profile returns four sections — demographics, income_and_jobs, ethnicity, and residential — each as an object mapping metric names to {value, national} pairs. The national field is the US-wide figure for that metric, letting you compare the local value against the national baseline in a single response.How does pagination work for `search_moving_companies`, and what detail is available per company?+
name and slug. To get full details — address, phone, website, services, dot_number, mc_number, and bbb_rating — pass the slug to get_moving_company_detail. The directory is sorted by BBB rating.Are moving company reviews or customer ratings returned by the API?+
bbb_rating (BBB letter grade), dot_number, and mc_number for each company, but does not include user-submitted reviews or star ratings. You can fork this API on Parse and revise it to add an endpoint targeting review data if that field is needed.Does the API cover zip codes outside the United States?+
get_city_profile, compare_cities, and get_school_reports — accept only 5-digit US zip codes. Non-US locations are not covered. You can fork this API on Parse and revise it to add endpoints for non-US location data from other sources.