# Dhaka Stock Exchange (DSE) Corporate Disclosures Scraper (`bareezh_codes/dsebd-corporate-disclosures-scraper`) Actor

Scrapes price-sensitive corporate disclosures, financial statements and company news for all Dhaka Stock Exchange (DSE) listed companies in Bangladesh, structured for traders, analysts and fintech apps.

- **URL**: https://apify.com/bareezh\_codes/dsebd-corporate-disclosures-scraper.md
- **Developed by:** [Salman Bareesh](https://apify.com/bareezh_codes) (community)
- **Categories:** Business, News
- **Stats:** 1 total users, 0 monthly users, 77.8% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.40 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Get **Dhaka Stock Exchange (DSE)** corporate disclosures and news the moment they're published — board-meeting notices, dividend/rights announcements, financial-statement filings, sponsor/director shareholding changes and exchange-wide notices for every DSE-listed company in Bangladesh. This actor is a structured wrapper around DSE's own public news feed at [dsebd.org](https://www.dsebd.org/news_archive.php) ("Extended News Search"), with no login, no API key and no official DSE API required.

### Why use DSE Corporate Disclosures Scraper?

DSE requires every listed company to disclose board decisions, dividends, financial results and material events to the exchange, and dsebd.org publishes those disclosures publicly — but only as a page you browse one form submission at a time, with no official public API. Nearly 20 independent GitHub projects exist just to scrape this feed by hand. This actor turns it into structured, filterable, exportable data.

Main capabilities:

- Queries dsebd.org's own public "Extended News Search" feed by trading code, by exchange-wide news category, or by date range.
- Parses the disclosure record (trading code, headline, full text, date) into one flat, consistently-shaped JSON item, with any linked PDF attachment extracted automatically.
- Enriches each company disclosure with its full legal name (looked up from DSE's own company listing) and a link to its DSE profile page.
- Runs on the Apify platform, so you get scheduling (e.g. daily monitoring of a watchlist), API/webhook access, and integrations out of the box.

Typical use cases:

- **Retail & institutional investor alerts** — get notified the moment a company you hold announces a dividend, board meeting or material event.
- **Brokerage / fintech products** — power a DSE disclosure feed feature without screen-scraping the portal yourself.
- **Financial journalism & research** — track disclosure volume and sentiment across DSE's ~400+ listed companies.
- **Frontier-market fund monitoring** — follow specific Bangladeshi holdings without checking the DSE site manually every day.

### What data can DSE Corporate Disclosures Scraper extract?

| Field | Type | Description |
|---|---|---|
| `tradingCode` | string | DSE ticker symbol (`null` for exchange-wide feeds not tied to a company) |
| `companyName` | string | Full legal company name, looked up from DSE's company listing |
| `category` | string | `"Company Disclosure"` for a listed company, or the DSE feed name (e.g. `"EXCH"`, `"BSEC NEWS"`) for exchange/regulator-wide notices |
| `headline` | string | Disclosure headline as published |
| `disclosureDate` | string | Date DSE posted the disclosure (`YYYY-MM-DD`) |
| `attachmentUrl` | string | Linked PDF attachment, when the disclosure text references one |
| `detailUrl` | string | Link to the company's DSE profile page |

See [Output](#output) below for the full field reference and a complete real example.

### How to scrape Dhaka Stock Exchange corporate disclosures

1. Click **Try for free** (or **Run**) on this actor's page.
2. Optionally set `tradingCode` to a single DSE ticker (e.g. `"SQURPHARMA"`) to pull that company's full disclosure history.
3. Or, optionally set `category` to pull an exchange-wide feed (e.g. `"BSEC NEWS"`) instead of per-company disclosures.
4. Leave both blank and optionally set `dateFrom`/`dateTo` to pull disclosures from every company for a date range (defaults to the last 7 days).
5. Set `maxItems` to cap how many disclosures you want back.
6. Click **Start** and wait for the run to finish (a default run typically finishes in under a minute).
7. Open the **Dataset** tab and export as JSON, CSV, or Excel — or pull it programmatically via the **API** tab.

### How much will it cost to scrape Dhaka Stock Exchange disclosures?

You pay only for disclosures delivered — no subscription.

| Your Apify discount tier | Price per result | 1,000 results |
|---|---|---|
| Free | $0.012 | $12 |
| Bronze | $0.0108 | $10.80 |
| Silver | $0.0096 | $9.60 |
| Gold | $0.0084 | $8.40 |
| Platinum / Diamond | $0.0084 | $8.40 |

Apify's free plan includes $5 of monthly credit — enough for well over 400 disclosures at no cost. A daily pull of the newest 200 disclosures costs about $2.40/day at the Free tier (less on higher discount tiers).

A run stops automatically once it has returned `maxItems` results or once it hits your run's maximum charge (Apify's pay-per-result cost cap), whichever comes first.

### Input

All fields are optional — running the actor with an empty input (`{}`) returns every disclosure DSE published across all companies in the last 7 days. See the **Input** tab for the full configuration schema.

| Field | Type | Default | Description |
|---|---|---|---|
| `tradingCode` | string | `""` (all) | A single DSE ticker to fetch full disclosure history for, e.g. `"SQURPHARMA"`. Takes priority over `category`. |
| `category` | string | `""` (none) | One of DSE's exchange-wide feeds instead of per-company disclosures: `COMPANY NEWS`, `CNW`, `DSE NEWS`, `SEC NEWS`, `BSEC NEWS`, `MEMBER NEWS`, `TREC NEWS`, `ICB M. FUNDS`, `EXCH`, `REGL`, `CSD`. Ignored when `tradingCode` is set. |
| `dateFrom` | string (`YYYY-MM-DD`) | 7 days ago | Start of the disclosure date range, inclusive |
| `dateTo` | string (`YYYY-MM-DD`) | today | End of the disclosure date range, inclusive |
| `maxItems` | integer | `200` | Maximum number of disclosures to return (up to 5000) |

`dateFrom` must not be later than `dateTo` when both are set — the run fails immediately with an error message if it is. When `tradingCode` or `category` is set, DSE returns that feed's full history rather than a date-limited one; `dateFrom`/`dateTo` are then applied locally to the results if you also set them.

Example input for "the last 20 disclosures from Square Pharmaceuticals":

```json
{
  "tradingCode": "SQURPHARMA",
  "maxItems": 20
}
```

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. One item is produced per disclosure, with the same keys every time (`null` when a field doesn't apply). This is a real item from a live run of this actor:

```json
{
  "tradingCode": "SILVAPHL",
  "companyName": "Silva Pharmaceuticals Limited",
  "category": "Company Disclosure",
  "headline": "SILVAPHL: Auditor's report regarding status of IPO Proceeds utilization",
  "disclosureDate": "2026-09-13",
  "publishedAt": "2026-09-13",
  "newsBody": "Silva Pharmaceuticals Limited submitted auditor's report regarding status of IPO (Initial Public Offering) Proceeds utilization statement for the month of July, 2026. To view the details, please visit: https://www.dsebd.org/Auditors_opinion/Silva%20Pharma,%20July%202026.pdf",
  "detailUrl": "https://www.dsebd.org/displayCompany.php?name=SILVAPHL",
  "attachmentUrl": "https://www.dsebd.org/Auditors_opinion/Silva%20Pharma,%20July%202026.pdf",
  "sourcePage": "https://www.dsebd.org/old_news.php?inst=SILVAPHL&criteria=3&archive=news"
}
```

#### Field reference

| Field | Description |
|---|---|
| `tradingCode` | DSE ticker symbol; `null` for exchange-wide feeds not tied to a specific company (e.g. `EXCH`, `BSEC NEWS`) |
| `companyName` | Full legal company name, looked up from DSE's company listing; `null` when the ticker isn't found there or the item isn't company-specific |
| `category` | `"Company Disclosure"` for a listed company, or the raw DSE feed name for exchange/regulator-wide notices |
| `headline` | Disclosure headline as published on DSE |
| `disclosureDate` | Date DSE posted the disclosure (`YYYY-MM-DD`) |
| `publishedAt` | Same value as `disclosureDate` — DSE only publishes a date, not a separate publish timestamp, for this feed |
| `newsBody` | Full disclosure text as published |
| `detailUrl` | Link to the company's DSE profile page; `null` for non-company feeds |
| `attachmentUrl` | Linked PDF attachment, when the disclosure text references one; `null` otherwise |
| `sourcePage` | The exact DSE URL this item was fetched from |

### FAQ, disclaimers, and support

**Is this legal?** This actor only reads DSE's own public news search feed (dsebd.org), which requires no login, no cookies and no CAPTCHA to view. It does not access any data beyond what dsebd.org already serves to any visitor.

**Why does dsebd.org need TLS verification disabled?** dsebd.org's certificate chain is missing an intermediate certificate — a longstanding misconfiguration on the site's end, not an anti-bot measure. Browsers and command-line tools that chase the missing certificate through your OS's trust store don't notice, but strict HTTP clients (including this actor's) reject it outright with "unable to get local issuer certificate" unless certificate verification is disabled specifically for this host. This is the same workaround the ~20 independent open-source DSE-scraper projects on GitHub use.

**Why are `tradingCode` and `companyName` sometimes `null`?** DSE's search form mixes real ticker symbols with several exchange/regulator-wide feed codes (`EXCH`, `REGL`, `BSEC NEWS`, etc.) in the same dropdown. Those feeds aren't tied to one company, so there's no ticker or company name to report for them.

**Why don't the `category` values match "Price Sensitive Information" / "Financial Statement" / "Dividend"?** DSE's live "Extended News Search" page does not expose a category breakdown by disclosure type — that filter does not exist on the current site. This actor's `category` input instead reflects the feed choices DSE's own form actually offers today. If DSE adds per-type categorization later, this actor's fields don't need to change to pick it up (a build refresh would be required).

**Can I get very old disclosures?** Yes — a per-`tradingCode` or per-`category` query returns that feed's complete history (not just the last 2 years shown in DSE's own date picker), capped by `maxItems`.

#### Legal & compliance note

All data comes from the Dhaka Stock Exchange's own public disclosure feed (dsebd.org), which DSE operates for public dissemination of the corporate disclosures it requires listed companies to make. This actor does not bypass any login, paywall or CAPTCHA. Re-verify DSE's Terms of Use before building a redistribution product on top of this data, since terms can change independently of this actor.

#### Limits & notes

- This actor parses dsebd.org's server-rendered HTML rather than a documented API, because DSE does not publish one. If DSE changes the page's table layout, the actor fails the run loudly (rather than pushing malformed rows) so a broken parser is never silently mistaken for "no new disclosures."
- Network/HTTP errors are logged, not pushed to the dataset — you never pay for a failed row.
- An unrecognized `tradingCode` (e.g. a typo or delisted symbol) returns zero items with a warning, not a failed run.

#### Support

Found a bug or have a feature request? Use the **Issues** tab on this actor's page. For programmatic access, see the **API** tab for ready-made code snippets in your language of choice.

# Actor input Schema

## `tradingCode` (type: `string`):

A single DSE ticker symbol to fetch disclosure history for, e.g. "SQURPHARMA" (Square Pharmaceuticals). Leave blank to fetch across all companies for a date range instead. When set, this takes priority over Category and the Date range only filters the results locally (DSE's own per-symbol feed returns full history, not a date-limited one).

## `category` (type: `string`):

Pull one of DSE's exchange-wide news feeds instead of per-company disclosures (ignored when Trading code is set). "Company Disclosures" is not a feed choice here — leave both Trading code and Category blank to get per-company disclosures for the date range.

## `dateFrom` (type: `string`):

Start of the disclosure date range (YYYY-MM-DD), inclusive. Only applies when Trading code and Category are both blank, unless used together with them to locally filter their (undated) full-history feed. Leave blank together with Date to for the default last-7-days window.

## `dateTo` (type: `string`):

End of the disclosure date range (YYYY-MM-DD), inclusive. Leave blank together with Date from for the default last-7-days window.

## `maxItems` (type: `integer`):

Maximum number of disclosures to return.

## Actor input object example

```json
{
  "tradingCode": "",
  "category": "",
  "maxItems": 200
}
```

# Actor output Schema

## `dataset` (type: `string`):

One item per matching DSE disclosure

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("bareezh_codes/dsebd-corporate-disclosures-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("bareezh_codes/dsebd-corporate-disclosures-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call bareezh_codes/dsebd-corporate-disclosures-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bareezh_codes/dsebd-corporate-disclosures-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/NlgfDCwNecNPZfalt/builds/qvLmw9QNX7C0zdS5T/openapi.json
