eCourts Case Scraper avatar

eCourts Case Scraper

Pricing

from $3.99 / 1,000 results

Go to Apify Store
eCourts Case Scraper

eCourts Case Scraper

A robust, high-performance utility designed for developer automation, data integration, and AI training. Features built-in captcha bypass, headful/headless browser execution, and proxy support to scrape eCourts data seamlessly, reliably, and at scale.

Pricing

from $3.99 / 1,000 results

Rating

5.0

(2)

Developer

Coding Frontned

Coding Frontned

Maintained by Community

Actor stats

3

Bookmarked

65

Total users

4

Monthly active users

8 days ago

Last modified

Share

What this Actor does

This Actor looks up Indian court cases on the official eCourts Services website using each case's 16-character CNR. It returns structured case details when eCourts provides a verifiable case record.

Use it to review case status, registration details, parties and advocates, acts, FIR details, hearing history, and order metadata. The Actor follows eCourts' browser lookup form and requires a CAPTCHA solver key configured as a protected Actor secret.

Start a run

  1. In the Actor settings, add CAPTCHA_API_KEY as a protected secret or environment variable. Do not put the key in Actor input.
  2. Open the Input tab and enter one or more CNRs. Each value has four letters followed by twelve digits.
  3. Adjust retry or proxy settings if needed. Apify residential Proxy is enabled by default.
  4. Click Start. When the run finishes, open Case Records for saved cases and Output summary for the run status.

Input

caseNos is required. All other input fields are optional. The Actor accepts only the fields listed here.

CNR lookup

FieldTypeRequired?DefaultWhat it does
caseNosArray of stringsRequiredNoneCNRs to look up. Each item must match four letters followed by twelve digits. Enter 1 to 100 values. Repeated CNRs are looked up once.

Simple one-case input:

{
"caseNos": ["KARC010037582023"]
}

Retry and proxy settings

FieldTypeRequired?DefaultBounds or choicesWhat it does
maxCaptchaRetriesIntegerOptional31–5CAPTCHA solver attempts in each browser session.
maxSessionAttemptsIntegerOptional301–30Fresh browser and proxy sessions attempted for each unique CNR.
proxyCountryFallbacksArray of stringsOptional["GB", "US", "IN"]1–5 unique codes; two letters, optionally followed by _ and two more lettersCountries tried in order when Apify Proxy is used. The list cycles if more sessions are needed.
proxyConfigurationObjectOptional{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}Only the nested fields below are acceptedSelects Apify Proxy or custom proxy URLs.

An example with fewer retries and a custom country order:

{
"caseNos": ["KARC010037582023", "KABC010006152020"],
"maxCaptchaRetries": 2,
"maxSessionAttempts": 8,
"proxyCountryFallbacks": ["IN", "GB"]
}

proxyConfiguration fields

FieldTypeRequired?DefaultBounds or choicesWhat it does
proxyConfiguration.useApifyProxyBooleanOptionaltruetrue or falseUses Apify Proxy when custom proxy URLs are not supplied. Turning it off without custom URLs uses a direct connection.
proxyConfiguration.apifyProxyGroupsArray of stringsOptional["RESIDENTIAL"]No item-count boundProxy groups used when Apify Proxy is enabled.
proxyConfiguration.proxyUrlsArray of stringsOptionalNoneNo item-count boundCustom proxy URLs. Country rotation is not applied to custom URLs. Keep any credentials in private settings, not shared input examples.

For example, this disables Apify Proxy and uses a direct connection:

{
"caseNos": ["KARC010037582023"],
"proxyConfiguration": {
"useApifyProxy": false
}
}

The Actor removes repeated CNRs after normalizing their letter case. A successful case lookup can take multiple CAPTCHA attempts and fresh sessions, so larger batches or retry limits can take longer and use more proxy and solver traffic.

Case records

The dataset contains verified case details only. An unsuccessful lookup, an invalid input, or an unparseable response does not create a diagnostic row. A CNR for which eCourts reports no case also has no dataset row. The run log contains failure details.

The example below is illustrative documentation data, not a verified live result. Optional fields can be absent when eCourts does not return them.

Details come from the returned case page. Order fields contain the displayed order metadata; the Actor does not download or extract PDF contents. Empty values are omitted. An act entry needs an act name, a hearing-history entry needs a judge, and an order entry needs an order number; incomplete entries are omitted while the valid case details are kept.

Hearing history contains the dates and purposes shown in the case table. The Actor does not open the separate hearing-business pages or resolve PDF document links, so it does not return the detailed proceedings text or order document URLs from those views.

{
"case_no": "KARC010037582023",
"cnr": "KARC010037582023",
"courtName": "District and Sessions Court, Bengaluru",
"basicDetails": {
"caseType": "CIVIL SUIT",
"filingNumber": "1234/2023",
"filingDate": "15-01-2023",
"cnrNumber": "KARC010037582023"
},
"caseStatus": {
"firstHearingDate": "20-01-2023",
"nextHearingDate": "10-10-2024",
"stageOfCase": "Evidence",
"courtNumberAndJudge": "Court Room 3, Principal Judge"
},
"petitionerAdvocate": ["Ramesh Kumar", "Advocate - S. Sharma"],
"respondentAdvocate": ["State of Karnataka"],
"acts": [
{
"act": "Code of Civil Procedure",
"section": "Order VII Rule 1"
}
],
"firDetails": {
"policeStation": "Central Police Station",
"firNumber": "56/2022"
},
"caseHistory": [
{
"judge": "Principal Judge",
"businessOnDate": "10-01-2023",
"hearingDate": "20-01-2023",
"purpose": "Hearing"
}
],
"interimOrders": [
{
"orderNumber": "1",
"orderDate": "20-01-2023",
"orderType": "Notice issued"
}
],
"finalOrders": [
{
"orderNumber": "2",
"orderDate": "10-10-2024",
"orderType": "Final order"
}
]
}
FieldTypeRequired?Meaning
case_noStringRequiredNormalized CNR, retained as a case-number alias.
cnrStringRequiredCNR used for the lookup.
courtNameStringOptionalCourt heading from the case page.
basicDetailsObject of stringsOptionalRegistration details such as case type, filing number, and dates. Keys depend on the eCourts page.
caseStatusObject of stringsOptionalCurrent status and hearing details. Keys depend on the eCourts page.
petitionerAdvocateArray of stringsOptionalPetitioner and advocate entries.
respondentAdvocateArray of stringsOptionalRespondent and advocate entries.
actsArray of objectsOptionalActs and sections. Each object has act and may include section.
firDetailsObject of stringsOptionalFIR information, when present. Keys depend on the eCourts page.
caseHistoryArray of objectsOptionalHearing history with judge and optional businessOnDate, hearingDate, and purpose.
interimOrdersArray of objectsOptionalInterim orders with orderNumber and optional orderDate and orderType.
finalOrdersArray of objectsOptionalFinal orders with orderNumber and optional orderDate and orderType.

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Run status and output summary

The Actor counts only verified case records whose dataset writes completed. A run is SUCCEEDED when at least one case record was saved. If a later lookup or dataset write fails after cases were saved, the run can still succeed with isPartial: true. If no real case records were saved, the run is FAILED; diagnostic-only output never counts as a result.

The Output summary link opens the OUTPUT_SUMMARY record from the run's default Key-value store. It contains exactly these fields:

FieldTypeRequired?Meaning
statusStringRequiredSUCCEEDED when at least one case record was saved; otherwise FAILED.
itemsStoredNonnegative integerRequiredNumber of verified case records whose dataset writes completed.
isPartialBooleanRequiredtrue when collection was interrupted or a lookup or write failed after at least one record was saved.

Completed run:

{
"status": "SUCCEEDED",
"itemsStored": 2,
"isPartial": false
}

Run with limited results:

{
"status": "SUCCEEDED",
"itemsStored": 1,
"isPartial": true
}

Run with no saved case records:

{
"status": "FAILED",
"itemsStored": 0,
"isPartial": false
}

Access, cost, and support

eCourts may reject automated requests, require CAPTCHA retries, rate-limit traffic, or return incomplete case pages. A failure to access or verify a case is reported in the run log, not as a dataset record. Use the service only in line with eCourts terms and applicable privacy laws.

Runs can use Apify browser compute, Apify Proxy traffic, and the separately configured CAPTCHA solver. Residential proxy use and CAPTCHA solver requests may incur charges under your accounts; prices depend on your plans and usage.

For help, use the Actor's Issues tab and include sanitized run-log details. Never include proxy credentials, CAPTCHA keys, or CAPTCHA values.

W3Crawler CAPTCHA configuration

Search uses https://api.w3crawler.com/api/captcha/solve with model bc3f0628-29ba-4555-9c27-ff26b4fdc179 (ECourts India Captcha). The dedicated key owned by admin@w3crawler.com is provided through the encrypted CAPTCHA_API_KEY Actor environment variable. It is not an input field and is never stored in source, logs, or dataset output. PNG, JPEG and WebP uploads retain their actual image format.

The key has no expiry or lifetime usage quota; the account has unlimited wallet credits. General CAPTCHA service request throttling still applies. Credentials or billing failures stop the search; explicit invalid predictions can obtain a fresh image within the configured attempt limit. Keep the key private and do not include it in scheduled-task input.

Dataset charge limit

Apify may stop storing new dataset rows when the run's maximum total charge is reached. The Actor counts only stored rows, stops further dataset writes, and reports isPartial: true when that happens. A source result count is not a saved-record count. Check OUTPUT_SUMMARY and the dataset for the final stored count.