Discover/Mn API
live

Mn APIbcegl.hlb.state.mn.us ↗

Search and retrieve Minnesota cosmetology licensee profiles via the MN Board of Cosmetology public verification service. Lookup by name, business, or license number.

Endpoint health
verified 3d ago
get_licensee_profile
search_licensees
2/2 passing latest checkself-healing
Endpoints
2
Updated
1mo ago

What is the Mn API?

This API exposes 2 endpoints covering the Minnesota Board of Cosmetology public license verification service, returning licensee name, city, state, license numbers, license types, statuses, and expiration dates. Use search_licensees to query across thousands of licensees by last name, first name, business name, or license number, and get_licensee_profile to retrieve the complete license history and disciplinary flag for a specific individual.

This call costs2 credits / call— charged only on success
Try it
Licensee last name, exact match or with a trailing * wildcard (e.g. Ander*). Omit only when searching by another field.
Licensee first name, exact match or with a trailing * wildcard (e.g. Ab*). Omitted = not filtered on first name.
Salon or business name filter as offered by the site's search form (exact or trailing * wildcard). Omitted = not filtered. Not exercised in this build beyond being passed through to the site.
License number filter (e.g. the license_number value shown on a profile). Returns the single licensee holding that license. Omitted = not filtered.
→ api.parse.bot/scraper/6f34b419-fb52-428a-b557-628acbd07816/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/6f34b419-fb52-428a-b557-628acbd07816/search_licensees?last_name=Anderson' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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 bcegl-hlb-state-mn-us-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: Minnesota Board of Cosmetology license lookup — bounded, re-runnable."""
from parse_apis.bcegl_hlb_state_mn_us_api import MnCosmetology, LicenseeNotFound

client = MnCosmetology()

# Search for licensees by last name; limit= caps total items yielded.
for summary in client.licensee_summaries.search(last_name="Anderson", limit=5):
    print(summary.name, summary.city, summary.state)

# Drill into the first match's full profile.
hit = client.licensee_summaries.search(last_name="Anderson", limit=1).first()
if hit is not None:
    try:
        profile = hit.details(last_name="Anderson")
    except LicenseeNotFound:
        print("Licensee no longer found for entity", hit.entity_id)
    else:
        print(profile.name, profile.city, profile.state, profile.zip)
        print("Disciplinary action:", profile.disciplinary_action)

        # Walk current and expired licenses on the profile.
        for lic in profile.current_licenses:
            print("  [current]", lic.license_type, lic.license_number, lic.license_status,
                  "expires", lic.expiration_date)
        for lic in profile.expired_licenses:
            print("  [expired]", lic.license_type, lic.license_number, lic.license_status)

# Direct point-lookup when entity_id is already known.
detail = client.licensees.get(entity_id="1562810", last_name="Anderson")
print(detail.name, "as of", detail.as_of_date)

print("exercised: licensee_summaries.search / details / licensees.get")
All endpoints · 2 totalmissing one? ·

Searches the Board of Cosmetology License Search Service and returns every matching licensee in a single call (the site returns all matches on one page; a last-name-only search for a common surname returned 313 rows). Each row carries the licensee's display name, city, state and the numeric entity_id that get_licensee_profile consumes. Name fields match exactly unless a trailing * wildcard is used (e.g. Ander* matches Anderson and Andersen; Ab* on first_name matches Abby and Abigail). At least one search field must be supplied, otherwise a stale_input error is returned; the typical lookup supplies last_name and optionally first_name, and a license_number-only search returns the single holder of that license. A search with no matches returns an empty results array with total_results 0. The site does not display licenses that have been expired for more than 7 years; that notice is returned as-is in the notice field. Results include out-of-state licensees, so state is not always MN.

Input
ParamTypeDescription
last_namestringLicensee last name, exact match or with a trailing * wildcard (e.g. Ander*). Omit only when searching by another field.
first_namestringLicensee first name, exact match or with a trailing * wildcard (e.g. Ab*). Omitted = not filtered on first name.
business_namestringSalon or business name filter as offered by the site's search form (exact or trailing * wildcard). Omitted = not filtered. Not exercised in this build beyond being passed through to the site.
license_numberstringLicense number filter (e.g. the license_number value shown on a profile). Returns the single licensee holding that license. Omitted = not filtered.
Response
{
  "type": "object",
  "fields": {
    "notice": "the site's coverage notice about licenses expired more than 7 years not being displayed",
    "results": "array of matching licensees, each with entity_id (numeric string key for get_licensee_profile), entity_type_id, name, city, state",
    "total_results": "integer count of rows returned (all matches; the site does not paginate)"
  },
  "sample": {
    "data": {
      "notice": "The Board of Cosmetology License Search Service does not display licenses that have been expired for more than 7 years.",
      "results": [
        {
          "city": "Lake Park",
          "name": "Abby Sue Anderson",
          "state": "MN",
          "entity_id": "1468768",
          "entity_type_id": "4"
        },
        {
          "city": "Sandstone",
          "name": "Abigail A Anderson",
          "state": "MN",
          "entity_id": "1562810",
          "entity_type_id": "4"
        },
        {
          "city": "Waconia",
          "name": "Abigail M Anderson",
          "state": "MN",
          "entity_id": "1571773",
          "entity_type_id": "4"
        }
      ],
      "total_results": 3
    },
    "status": "success"
  }
}

About the Mn API

Endpoints and What They Return

The search_licensees endpoint accepts last_name, first_name, business_name, and license_number as optional filter parameters. Each supports exact or trailing-wildcard matching (e.g., Ander*). The response includes a results array where each row contains entity_id, entity_type_id, name, city, and state. The entity_id field is the key used to fetch a full profile. The endpoint returns all matches in a single response — a wildcard surname search for a common name returned 313 rows — and a total_results integer count is included alongside a notice about licenses expired more than 7 years ago not being displayed.

License Profile Detail

The get_licensee_profile endpoint requires entity_id (from search results) and last_name, with an optional first_name. It returns name, city, state, zip, business_name, as_of_date, and two arrays: current_licenses and expired_licenses. Each license record in those arrays carries license_type, license_type_id, license_number, license_status, original_license_date, expiration_date, and retired_date. The profile also surfaces a disciplinary_action flag and, where applicable, a salon-manager designation.

Coverage and Scope

Data covers only licensees in the Minnesota Board of Cosmetology system. Licenses expired more than 7 years ago are not displayed, as noted in the notice field returned by search_licensees. The as_of_date field in profile responses indicates the date the source reports the data current as of. Entity type code 4 has been observed for individual licensees; business entities may use different codes.

Reliability & maintenanceVerified

The Mn API is a managed, monitored endpoint for bcegl.hlb.state.mn.us — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bcegl.hlb.state.mn.us 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 bcegl.hlb.state.mn.us 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.

Last verified
3d ago
Latest check
2/2 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Verify that a cosmetologist or esthetician holds a current Minnesota license before hiring
  • Check expiration dates on active licenses for a salon's staff roster using get_licensee_profile
  • Look up whether a licensee has a disciplinary_action flag on their public record
  • Retrieve license history for a named individual across both current_licenses and expired_licenses arrays
  • Search for all licensees associated with a specific salon or business name using the business_name parameter
  • Build a license monitoring tool that tracks expiration_date changes for a set of entity_ids
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 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.

Frequently asked questions
Does the Minnesota Board of Cosmetology offer an official developer API?+
No. The Minnesota Board of Cosmetology does not publish a documented public API. License data is available only through the public verification search at bcegl.hlb.state.mn.us.
What does search_licensees return, and how do wildcards work?+
search_licensees returns a results array with one row per matching licensee, each containing entity_id, name, city, and state. All four filter params — last_name, first_name, business_name, and license_number — accept trailing wildcard syntax (e.g., 'Smith*'). Omitting all params is not recommended; the endpoint reflects whatever the source returns for that query. All matches are returned in one response without pagination.
Are licenses that expired more than 7 years ago available through the API?+
No. The source system explicitly excludes licenses expired more than 7 years ago, and the search_licensees response surfaces this as a notice field. The expired_licenses array in get_licensee_profile only covers records the source makes visible. You can fork this API on Parse and revise it to add supplementary historical data if you have an alternate source for older records.
Does the API cover other Minnesota health-related license types, such as cosmetology school or instructor licenses?+
The API covers individual and business licensees returned by the Board of Cosmetology public search, including the license_type values the source exposes. Whether instructor or school-specific license types appear depends on how the source classifies them. Coverage of other Minnesota health licensing boards — such as nursing or medical — is not included. You can fork this API on Parse and revise it to add endpoints pointing at other HLB verification services.
Does get_licensee_profile include contact information such as phone numbers or email addresses?+
No. The profile returns name, city, state, and zip, but the source does not expose phone numbers, email addresses, or street-level addresses. You can fork this API on Parse and revise it to add an endpoint if the source ever makes additional contact fields publicly available.
Page content last updated . Spec covers 2 endpoints from bcegl.hlb.state.mn.us.
Related APIs in Government PublicSee all →
pha.hlb.state.mn.us API
Search and retrieve current license and registration information for Minnesota pharmacy professionals including pharmacists, pharmacy technicians, interns, and preceptors, as well as facility licenses regulated by the Minnesota Board of Pharmacy. Verify credentials and check professional standing for anyone in the pharmacy field operating in Minnesota.
roster.aelslagid.state.mn.us API
Search for Minnesota civil engineer and professional licenses to verify credentials and find contact information for licensed professionals registered with the state board. Look up current licensure status, specializations, and registration details for architects, engineers, surveyors, landscape architects, and other design professionals in Minnesota.
services.bacb.com API
Access data from services.bacb.com.
pharmacy.texas.gov API
Access data from pharmacy.texas.gov.
apps.dos.ny.gov API
Access data from apps.dos.ny.gov.
nursys.com API
Search nurse licensure records across multiple state boards and verify nursing credentials in real-time through Nursys QuickConfirm. Get detailed information about participating jurisdictions and their specific licensure requirements.
myfloridalicense.com API
Search and verify Florida veterinary licenses issued by the Department of Business & Professional Regulation, retrieving detailed practitioner information, license status, and credentials. Look up veterinarians by name or license number to confirm their professional standing and qualifications.
docinfo.org API
Access data from docinfo.org.