Baidu APIaiqicha.baidu.com ↗
Access Chinese company search, shareholder data, executive profiles, and risk info from Aiqicha via 6 structured API endpoints.
What is the Baidu API?
This API exposes 6 endpoints covering Chinese business intelligence from Aiqicha (爱企查), Baidu's company registry platform. Use search_companies to find firms by name or registration number, get_company_detail to pull full company profiles, and dedicated endpoints for shareholders, executives, and individual business people. All responses return a status, a msg, and a structured data object containing the requested records.
curl -X GET 'https://api.parse.bot/scraper/5039cc3b-8e42-4e7c-949b-953a384356c4/search_companies' \ -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 aiqicha-baidu-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.
"""
Aiqicha Business Intelligence API Client
Comprehensive API for Chinese business intelligence from Aiqicha (Baidu).
Includes company search, details, shareholders, executives, and person lookup.
Get your API key from: https://parse.bot/settings
Note: This API has strict mainland-China-only geo-blocking.
"""
import os
import requests
from typing import Any, Dict, List, Optional
class ParseClient:
"""Client for interacting with the Aiqicha Business Intelligence API."""
def __init__(self, api_key: Optional[str] = None):
"""
Initialize the Parse API client.
Args:
api_key: API key for authentication. If not provided, reads from PARSE_API_KEY env var.
"""
self.base_url = "https://api.parse.bot"
self.scraper_id = "9bb50d87-941e-4c12-b162-4f109781ce67"
self.api_key = api_key or os.getenv("PARSE_API_KEY")
if not self.api_key:
raise ValueError("API key must be provided or set in PARSE_API_KEY environment variable")
def _call(self, endpoint: str, method: str = "POST", **params) -> Dict[str, Any]:
"""
Make a request to the Parse API.
Args:
endpoint: API endpoint name
method: HTTP method (GET or POST)
**params: Query/body parameters
Returns:
Response data as dictionary
Raises:
requests.RequestException: If the API request fails
"""
url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
headers = {
"X-API-Key": self.api_key,
"Content-Type": "application/json"
}
try:
if method == "GET":
response = requests.get(url, headers=headers, params=params, timeout=30)
elif method == "POST":
response = requests.post(url, headers=headers, json=params, timeout=30)
else:
raise ValueError(f"Unsupported HTTP method: {method}")
response.raise_for_status()
return response.json()
except requests.RequestException as e:
raise requests.RequestException(f"API request failed: {str(e)}")
def search_companies(self, query: str) -> Dict[str, Any]:
"""
Search for companies by name, keyword, or registration number.
Args:
query: Search keyword (company name, ID, etc.)
Returns:
Response containing list of matching companies with entName and pid
"""
return self._call("search_companies", method="GET", query=query)
def get_company_detail(self, pid: str) -> Dict[str, Any]:
"""
Retrieve detailed information about a specific company by its PID.
Args:
pid: Company PID (from search results)
Returns:
Response containing company details including basicInfo
"""
return self._call("get_company_detail", method="GET", pid=pid)
def get_company_shareholders(self, pid: str) -> Dict[str, Any]:
"""
Get the shareholder list for a given company.
Args:
pid: Company PID
Returns:
Response containing list of shareholders with shareholderName and shareholdRatio
"""
return self._call("get_company_shareholders", method="GET", pid=pid)
def get_company_executives(self, pid: str) -> Dict[str, Any]:
"""
Get the list of key executives and management personnel for a company.
Args:
pid: Company PID
Returns:
Response containing list of executives with name and title
"""
return self._call("get_company_executives", method="GET", pid=pid)
def search_people(self, name: str) -> Dict[str, Any]:
"""
Search for business people/executives by name.
Args:
name: Person name
Returns:
Response containing list of matching people with name and pid
"""
return self._call("search_people", method="GET", name=name)
def get_person_detail(self, pid: str) -> Dict[str, Any]:
"""
Get detailed profile of a business person.
Args:
pid: Person PID (from search results)
Returns:
Response containing person details with role and name
"""
return self._call("get_person_detail", method="GET", pid=pid)
def print_section(title: str) -> None:
"""Print a formatted section header."""
print(f"\n{'='*70}")
print(f" {title}")
print(f"{'='*70}\n")
if __name__ == "__main__":
# Initialize client
client = ParseClient()
# ============================================================================
# Workflow: Research a company and its key stakeholders
# ============================================================================
print_section("STEP 1: Search for Companies")
print("Searching for 'Baidu' companies...")
search_result = client.search_companies(query="Baidu")
if search_result.get("status") == 0 and search_result.get("data", {}).get("list"):
companies = search_result["data"]["list"]
print(f"Found {len(companies)} companies:\n")
for idx, company in enumerate(companies[:3], 1): # Process top 3 results
company_name = company.get("entName", "N/A")
company_pid = company.get("pid", "N/A")
print(f" {idx}. {company_name}")
print(f" PID: {company_pid}\n")
# ====================================================================
# STEP 2: Get detailed information for each company
# ====================================================================
print_section(f"STEP 2: Company Details - {company_name}")
detail_result = client.get_company_detail(pid=company_pid)
if detail_result.get("status") == 0:
company_data = detail_result.get("data", {})
basic_info = company_data.get("basicInfo", {})
legal_person = basic_info.get("legalPerson", "N/A")
ent_name = basic_info.get("entName", "N/A")
print(f"Company Name: {ent_name}")
print(f"Legal Representative: {legal_person}")
else:
print(f"Failed to fetch details: {detail_result.get('msg', 'Unknown error')}")
# ====================================================================
# STEP 3: Get shareholders information
# ====================================================================
print_section(f"STEP 3: Shareholders - {company_name}")
shareholders_result = client.get_company_shareholders(pid=company_pid)
if shareholders_result.get("status") == 0:
shareholders = shareholders_result.get("data", {}).get("list", [])
if shareholders:
print(f"Total Shareholders: {len(shareholders)}\n")
for shareholder in shareholders[:5]: # Show top 5
shareholder_name = shareholder.get("shareholderName", "N/A")
shareholding_ratio = shareholder.get("shareholdRatio", "N/A")
print(f" • {shareholder_name}: {shareholding_ratio}")
else:
print("No shareholder information available")
else:
print(f"Failed to fetch shareholders: {shareholders_result.get('msg', 'Unknown error')}")
# ====================================================================
# STEP 4: Get executives information
# ====================================================================
print_section(f"STEP 4: Key Executives - {company_name}")
executives_result = client.get_company_executives(pid=company_pid)
if executives_result.get("status") == 0:
executives = executives_result.get("data", {}).get("list", [])
if executives:
print(f"Total Executives: {len(executives)}\n")
for executive in executives[:5]: # Show top 5
exec_name = executive.get("name", "N/A")
exec_title = executive.get("title", "N/A")
print(f" • {exec_name}")
print(f" Title: {exec_title}\n")
else:
print("No executive information available")
else:
print(f"Failed to fetch executives: {executives_result.get('msg', 'Unknown error')}")
else:
print("No companies found or API error")
# ============================================================================
# Bonus: Search for a specific person
# ============================================================================
print_section("BONUS: Search for a Business Person")
print("Searching for 'Robin Li'...\n")
person_search_result = client.search_people(name="Robin Li")
if person_search_result.get("status") == 0 and person_search_result.get("data", {}).get("list"):
people = person_search_result["data"]["list"]
print(f"Found {len(people)} people named 'Robin Li':\n")
for person in people[:2]: # Show top 2 results
person_name = person.get("name", "N/A")
person_pid = person.get("pid", "N/A")
print(f"Name: {person_name}")
print(f"PID: {person_pid}")
# Get details for this person
person_detail_result = client.get_person_detail(pid=person_pid)
if person_detail_result.get("status") == 0:
person_data = person_detail_result.get("data", {})
person_role = person_data.get("role", "N/A")
print(f"Role: {person_role}")
else:
print(f"Failed to fetch person details: {person_detail_result.get('msg', 'Unknown error')}")
print()
else:
print("No people found with that name")
print_section("Workflow Complete")
print("Successfully demonstrated company and person research workflow!")Search for companies by name, keyword, or registration number.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search keyword (company name, ID, etc.) |
{
"type": "object",
"fields": {
"msg": "string",
"data": "object",
"status": "integer"
},
"sample": {
"msg": "ok",
"data": {
"list": [
{
"pid": "28434778170138",
"entName": "Baidu Online Network Technology (Beijing) Co., Ltd."
}
]
},
"status": 0
}
}About the Baidu API
Company Search and Detail
The search_companies endpoint accepts a query string — a company name, keyword, or registration number — and returns a list of matching entities from Aiqicha's database. Each match includes enough identifying data to obtain a company pid, which is the primary key used by all other company-scoped endpoints. Pass that pid to get_company_detail to retrieve the full company record, including registration details, business scope, legal status, registered capital, and address information.
Ownership and Management Data
get_company_shareholders and get_company_executives both accept a pid and return structured lists from the data field. Shareholders typically include investor names, shareholding percentages, and investment amounts. Executives cover key management roles such as legal representative, directors, and supervisors. These two endpoints allow you to map corporate ownership structures and leadership hierarchies for any company in the Aiqicha index.
People Lookup
search_people accepts a name parameter and returns business individuals who appear in Aiqicha's records — typically executives, legal representatives, or investors. The returned PIDs can then be passed to get_person_detail to retrieve a full profile, including the companies a person is associated with, their roles, and other professional background data surfaced by Aiqicha.
Coverage and Geo Restrictions
Aiqicha covers mainland Chinese registered companies and draws on public records from Chinese regulatory bodies. The source platform enforces strict mainland-China-only geo-blocking, so the API is primarily relevant for data on PRC-registered entities. Queries for Hong Kong, Macau, or Taiwan-registered companies may return limited or no results.
The Baidu API is a managed, monitored endpoint for aiqicha.baidu.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when aiqicha.baidu.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 aiqicha.baidu.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?+
- Verify the registration status and legal representative of a Chinese supplier before onboarding
- Map the shareholder structure of a target Chinese company using
get_company_shareholders - Identify all companies a specific executive is associated with via
search_peopleandget_person_detail - Screen for corporate risk flags on Chinese counterparties using
get_company_detail - Enrich a CRM with Chinese company registration numbers and business scope data
- Research executive backgrounds and board compositions for due diligence workflows
- Build a monitoring feed for changes in key personnel across a portfolio of Chinese entities
| 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 Aiqicha have an official developer API?+
What does `get_company_detail` return beyond basic registration info?+
data object from get_company_detail includes company registration details such as legal status, registered capital, business scope, establishment date, address, and the legal representative. The exact set of sub-fields reflects what Aiqicha exposes on a company's public profile page and may vary by company type or registration completeness.Does the API cover companies registered in Hong Kong, Macau, or Taiwan?+
Is risk or litigation data available through this API?+
How should I handle the `pid` parameter across endpoints?+
pid is a company or person identifier used by Aiqicha internally. You obtain a company pid from search_companies results and a person pid from search_people results. That pid is then passed directly to the detail, shareholder, or executive endpoints. Without a valid pid, those endpoints cannot return records.