Screener.in (email login) avatar

Screener.in (email login)

Under maintenance

Pricing

Pay per usage

Go to Apify Store
Screener.in (email login)

Screener.in (email login)

Under maintenance

Logs into Screener.in with email + password and extracts company details (getstockdetails) or runs screens (runQuery).

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Aditya Rokhade

Aditya Rokhade

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

4

Monthly active users

10 days ago

Last modified

Categories

Share

Screener.in custom Apify actor

A drop-in replacement for the third-party shashwattrivedi~screener-in actor, which broke when Screener.in moved to email-based login. This actor logs in with your registered email + password and exposes the same two modes with the same input/output contract.

Why the old actor broke

Screener.in migrated accounts to email login. The login form still posts a field named username, but it now expects your registered email (e.g. sacbhar@gmail.com), not a legacy handle. The old actor was sending the wrong credential, so logins failed.

Modes

getstockdetails (no login required)

{ "mode": "getstockdetails", "url": "https://www.screener.in/company/RELIANCE/" }

Returns:

{
"url": "...",
"name": "Reliance Industries Ltd",
"shareholding": { "quarterly": [ { "": "FIIs", "Jun 2026": 17.19, ... } ], "yearly": [...] },
"ratios": { "Market Cap": "₹ 15,80,194 Cr.", "Current Price": "₹ 1,168", ... },
"metrics": { "Name": "...", "CMP": "...", "Mar Cap": "...", "FII Hold": 17.19, "DII Hold": 21.1, "No of Share Holders": 4651863, ... }
}

runQuery (requires login)

{
"mode": "runQuery",
"queryString": "Market Capitalization > 50000 AND Price to Earning < 20",
"username": "your_email@example.com",
"password": "your_password"
}

Returns an array of company rows. Each row has Screener's own column headers plus short aliases matching the old actor: Name, CMP, Mar Cap, ROCE, ROCE 10Yr, Debt / Eq, Pledged, Prom Hold, Profit Prev 12M, Profit growth.

The exact column set returned by runQuery is whatever your logged-in account's saved screen is configured to show. The account used here already has the needed columns configured.

How login works (implementation detail)

Each run logs in fresh — no token caching:

  1. GET /login/ → capture the csrftoken cookie and the csrfmiddlewaretoken hidden input from the HTML.
  2. POST /login/ with Referer: https://www.screener.in/login/, the CSRF cookie, and body csrfmiddlewaretoken, next=, username=<email>, password=<password>.
  3. Server sets a sessionid cookie — that is what authenticates subsequent requests. Screen results are read via GET /screen/raw/?query=...&page=N.

The CSRF token is not tied to the login session and is never reused between runs.

Local test (no Apify runtime)

cd apify-screener
npm install
node test-local.mjs # defaults to RELIANCE
node test-local.mjs https://www.screener.in/company/TCS/

Deploy to Apify

npm install -g apify-cli # if you don't have it
apify login # paste your Apify API token
cd apify-screener
apify push # builds the Docker image and uploads the actor

After apify push, note the actor ID shown (format: <your_username>~screener-in-custom), then set it in the project config.js:

APIFY_ACTOR_ID: 'your_username~screener-in-custom',

screener.js needs no other changes — it already sends username (SCREENER_USERNAME, your email) and password for runQuery, and url for getstockdetails.

Security note

../config.js currently stores the Screener password and Apify tokens in plaintext. Prefer passing them via Apify's secret inputs (the input schema marks username/password as secret) or environment variables, and avoid committing real credentials to source control.