Dribbble Search API

POST

API health

24h health
Normal
24h average time
—
  • Healthy / normal
  • Available
  • Limited
  • Mostly down
Normal

Browse Dribbble's designer directory by specialty, location, budget, rating or PRO status, getting each designer's rating, starting price, response time and skills. Results describe profiles; they do not award work or confirm contract availability.

Dribbble Search lists designers from Dribbble's designer directory and returns each one's name, username, profile link, avatar, location, rating with its rating_scale, review count, completed projects, starting price, average response time, number of services, skills and PRO status. It answers who can take on a given kind of design project, where they are based and how they are rated, for teams hiring freelancers, agencies scouting talent and analysts studying the market for design services.

Every parameter is optional, so an empty call browses the directory. Pick one specialty with category, such as illustration or web-design; keyword accepts the same specialty values and only counts when category is absent. location is free text about where a designer is based, such as London, not a service area or time zone. This capability searches designers, not their work: shots by keyword come from Dribbble Shots. Read is_pro as a membership, not a mark of quality.

Price $1.39 per 1,000 requests ($0.001389 per call). Failed calls and empty results are not charged. Synchronous. For slow jobs add "mode": "async" to the body, take the job_id and poll.

AI prompt

Paste this into your AI assistant. It already holds this endpoint's parameters, response fields and an example request, so the assistant can ask what you need and then write the scraper.

Please help me write a data collection script with the EveryInfra Dribbble Search endpoint (dribbble/search).

Endpoint contract:
- Request: POST https://api.everyinfra.com/api/v1/social with the header Authorization: Bearer <API key>. Read the key from the EVERYINFRA_API_KEY environment variable and never hard-code it.
- In the request body, set platform to dribbble and action to search, and put the parameters inside params.
- No required parameters.
- Optional parameters:
  - category: Filters designer search queries by a single professional category: animation, branding, illustration, mobile, print, product-design, typography, or web-design. Overrides category input passed in keyword. (allowed: animation / branding / illustration / mobile / print / product-design / typography / web-design)
  - keyword: Serves as the design work search term in shots queries, or as the fallback designer category in search queries when category is omitted. Can be left empty when only browsing the designer directory. (allowed: animation / branding / illustration / mobile / print / product-design / typography / web-design)
  - location: Free-form text string filtering designers by location, such as "New York", "San Francisco, CA", or "London". Omitting this parameter disables location filtering. Does not represent service delivery areas or time zones.
  - min_budget: Filters designers by minimum project budget in USD using integers from 0 to 10000, where 0 sets no lower limit. Represents designer preferences rather than API execution costs or confirmed project quotes.
  - min_rating: Filters designers by minimum rating threshold in designer searches. Allowed values are option strings: any (unrestricted), 1, 2, 3, or 4 (representing the selected star rating and above). (allowed: 1 / 2 / 3 / 4 / any)
  - pro_only: Boolean flag filtering for Dribbble PRO designers when set to true, or leaving account type unrestricted when set to false. Must be passed as a JSON boolean, not a string ("false").
  - limit: The most rows to return in this call, an integer from 1 to 100. The default applies when you leave it out, and a call can return fewer rows. Larger values return 422 before any charge. (default: 30)
- Returns a list of records. Main fields of each record: user_id, username, name, url, avatar_url, location, rating, rating_scale, review_count, projects_completed, starting_price, response_time; 15 fields in total, full list at https://api.everyinfra.com/api/v1/social/catalog?platform=dribbble.
- Example request body:
{
  "platform": "dribbble",
  "action": "search",
  "params": {}
}
- Price: $1.39 per 1,000 requests; failed and empty results are not charged.
- For dozens or hundreds of targets, add "mode": "async" to the body: you get a job_id at once and poll GET https://api.everyinfra.com/api/v1/jobs/{job_id} for the result.
- On 422, fix the request using the suggested parameter names and allowed values in the error; on 429 or 503, wait for Retry-After and try again.

Before writing code, ask me which targets I need, how many, which fields, and what output format I want; then confirm the plan and the rough cost with me.

Request parameters

NameInTypeRequiredDefaultDescription
AuthorizationheaderstringYes-Bearer followed by your API key. Create it in the console; never put it in a URL or a code repository.
platformbodystringYesdribbblePlatform identifier, fixed value.
actionbodystringYessearchCapability identifier, fixed value.
categorybody.paramsenumNo-Filters designer search queries by a single professional category: animation, branding, illustration, mobile, print, product-design, typography, or web-design. Overrides category input passed in keyword; does not represent arbitrary work tags.Allowed valuesanimationbrandingillustrationmobileprintproduct-designtypographyweb-design
keywordbody.paramsenumNo-Serves as the design work search term in shots queries, or as the fallback designer category in search queries when category is omitted. Can be left empty when only browsing the designer directory.Allowed valuesanimationbrandingillustrationmobileprintproduct-designtypographyweb-design
locationbody.paramsNot declaredNo-Free-form text string filtering designers by location, such as "New York", "San Francisco, CA", or "London". Omitting this parameter disables location filtering. Does not represent service delivery areas or time zones.
min_budgetbody.paramsNot declaredNo-Filters designers by minimum project budget in USD using integers from 0 to 10000, where 0 sets no lower limit. Represents designer preferences rather than API execution costs or confirmed project quotes.
min_ratingbody.paramsenumNo-Filters designers by minimum rating threshold in designer searches. Allowed values are option strings: any (unrestricted), 1, 2, 3, or 4 (representing the selected star rating and above). Expects exact option strings, not arbitrary decimal numbers like 4.5 or shot likes.Allowed values1234any
pro_onlybody.paramsNot declaredNo-Boolean flag filtering for Dribbble PRO designers when set to true, or leaving account type unrestricted when set to false. Must be passed as a JSON boolean, not a string ("false"). PRO status does not constitute a formal quality certification.
limitbody.paramsinteger (1–100)No30The most rows to return in this call, an integer from 1 to 100. The default applies when you leave it out, and a call can return fewer rows. Larger values return 422 before any charge.

Code samples

bash
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "platform": "dribbble",
  "action": "search",
  "params": {}
}'

[OpenAPI definition (JSON)]Samples read the key from the EVERYINFRA_API_KEY environment variable; copied code never contains your key.

Response example

Real response

Captured September 26, 2026 at 08:56 (UTC) by calling this API with the parameters in the code sample above. results and count are that call's real response with personal information (names, handles, avatars, profile links, contact details) removed; the list keeps the first 2. id, billing and quota differ on every call, so only their shape is shown.

json
{
  "id": "req_…",
  "platform": "dribbble",
  "action": "search",
  "results": [
    {
      "user_id": "(已隐去)",
      "username": "(已隐去)",
      "name": "HALO LAB",
      "url": "https://dribbble.com/halolab",
      "avatar_url": "https://cdn.dribbble.com/(已隐去)",
      "location": "Warsaw, Poland",
      "rating": 4.9,
      "review_count": 141,
      "projects_completed": 144,
      "starting_price": "From $5,000/project",
      "response_time": "Responds in about 1 hour",
      "services_count": 15,
      "is_pro": true,
      "skills": [],
      "platform": "dribbble",
      "rating_scale": 5
    },
    {
      "user_id": "(已隐去)",
      "username": "(已隐去)",
      "name": "Phenomenon Studio",
      "url": "https://dribbble.com/phenomenonstudio",
      "avatar_url": "https://cdn.dribbble.com/(已隐去)",
      "location": "United States",
      "rating": 5,
      "review_count": 81,
      "projects_completed": 89,
      "starting_price": "From $5,000/project",
      "response_time": "Responds in about 3 hours",
      "services_count": 10,
      "is_pro": true,
      "skills": [],
      "platform": "dribbble",
      "rating_scale": 5
    }
  ],
  "count": 27,
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}

Response fields

Business data is in results. The table lists the fields a record can contain; values the platform does not show are never made up.

FieldMeaning
user_idUser's unique ID on the platform.
usernameUsername (@handle).
nameName of the object itself, for account, product and business capabilities.
urlLink to the record on the platform.
avatar_urlAvatar image link. Some platforms return sized CDN links that can expire.
locationLocation description passed through as is; the format varies by platform.
ratingRating. The scale varies by platform: rating_scale on the same row gives the maximum (usually 5; Booking, Douban, iQIYI and NAVER use 10). Convert with rating_scale before comparing across platforms, or the comparison can come out backwards.
rating_scaleMaximum of rating in the same row: 5 for five-star scales, 10 for ten-point scales. Present only when the row has a rating.
review_countNumber of reviews, for product and business capabilities. null means not disclosed, not 0.
projects_completedKeeps the platform's own meaning
starting_priceKeeps the platform's own meaning
response_timeKeeps the platform's own meaning
services_countKeeps the platform's own meaning
is_proKeeps the platform's own meaning
skillsKeeps the platform's own meaning
platformSource platform identifier, the same as platform in the request (for example xiaohongshu, tiktok).

FAQ

Can I search Dribbble designs by keyword here?

No. Dribbble Search lists designers, and its keyword only takes the specialty values that category takes, such as branding or mobile, applied when category is missing. To find design work by a free-text term, use the Dribbble Shots capability, whose keyword searches shots and which can sort them by popularity, recency or views.

How do the rating, budget and PRO filters work?

min_rating takes any or a star level from 1 to 4, sent as a string, and keeps designers rated at that level or above; decimals such as 4.5 are not accepted. min_budget is a whole number of US dollars for the lowest project budget, with 0 meaning no floor; it is not a budget for API calls or a confirmed quote. pro_only must be a JSON boolean, not a string.

How should I read rating?

Read rating next to rating_scale, which gives the maximum for that row, and review_count, which says how many reviews stand behind it. A high rating from a handful of reviews tells you little, and a null review_count means the number was not disclosed, not zero. projects_completed offers a second check on experience.

Errors and billing

401
Missing or invalid key. Authentication runs before parameter checks, so unauthenticated requests never see the parameter schema.
422
Wrong parameter name or value. The error lists the parameters and allowed values this capability accepts and the closest match; it happens before any charge.
402
Insufficient balance. Top up first.
429
The account's per-minute request limit was reached (all of its API keys count together; a key's own lower limit applies first). Wait for Retry-After and try again; a rate package in the console raises the limit.
503
Could not complete right now. Any charge for the call goes back to your balance automatically, and the billing receipt in the response states the actual outcome, including when it is not yet known. Do not resend blindly.
200 empty
The request completed without data and is not charged (billing.reason = empty_result_refunded).