NOVA: ₹0 brokerage for your first 30 days, with a full-service house behind you.
Pay ₹0. Miss nothing.
One Platform – For Every Investor's Trading Journey.
Whether you’re a serious trader, active options trader, occasional investor, woman building financial independence, or a long-term mutual fund investor — Nova gives you the technology, market access, support to invest and trade your way.
₹0 brokerage for the first 30 days from account activation; flat ₹9 per executed order thereafter. Statutory and clearing charges apply. See all charges.

What costs ₹0, what is free for 30 days, and what comes after
No fine print to hunt for. Every other charge is listed further down this page.

Always
- Account opening
- Demat AMC, free for lifetime
- IPO applications
- Call & trade
- Auto square-off
- No volume commitments
Brokerage for your first 30 days
- Equity intraday and delivery (stocks / ETFs)
- Equity futures & options
- Commodity futures & options (MCX)
- The 30 days start when your account is activated for trading
Then, flat per executed order
- Same price in every segment
- Per order, not per lot
- No plan to choose, it starts automatically
- IPO applications stay at ₹0
Statutory levies (STT/CTT, stamp duty, exchange & SEBI charges, GST) and broker clearing charges apply as listed under Other charges. Offer terms subject to change.
₹0 to begin. Nothing left out of the app.
The Nova app includes all of the following features at no extra charge.
Built for how you trade
Option traders
Strategy Builder & OI toolsEvery leg of a multi-leg strategy at ₹9 brokerage. Strategy Builder and OI tools included.
Intraday traders
Flat ₹9 · 30 days at ₹0The more orders you place, the more a flat ₹9 — and 30 days at ₹0 — saves you.
Commodity traders
Gold, silver & crude on MCXGold, silver, crude and more on MCX, from a house with commodities in its name.
Long-term investors
SIPs, IPOs, funds & bondsStock SIPs, IPOs, mutual funds and bonds from the same account.
New to markets
Start small, keep moreLearn with small trades while brokerage stays low: ₹0 for 30 days, then a flat ₹9.
Every rupee of brokerage you don't pay stays in your trading capital.
A min charge of ₹20 per executed order on intraday, F&O and commodities. Pick how many orders you place in a day.
Assumes 22 trading days in a month. Brokerage only; statutory and clearing charges are not included.
What an active trader saves with Nova
Illustration for a trader placing 2 executed orders a day, 22 trading days a month (44 orders), one lot per order. Brokerage only, before GST, after the 30-day free period. Statutory and clearing charges are not included; comparison rates are illustrative.
Trade free for 30 days. Then just ₹9 per order.
₹0 brokerage on every trade for your first 30 days. After that, a flat ₹9 per executed order across every segment — equity, F&O, commodities. No per-lot charges, and every other charge is listed on this page.
on all trades
all segments
Free period starts when your account is activated for trading. Statutory levies (STT/CTT, stamp duty, exchange & SEBI charges, GST) and broker clearing charges apply as listed below.
One price. Every segment.
Whether you buy one lot or trade up to the exchange freeze quantity, you pay the same ₹9 per executed order.
| Segment | First 30 days | From day 31 | How it works |
|---|---|---|---|
| Equity Intraday (Stocks / ETFs) | ₹0 | ₹9 | Per executed order |
| Equity Delivery (Stocks / ETFs) | ₹0 | ₹9 | Per executed order |
| Equity Futures — Nifty, Bank Nifty, Sensex, Stock Futures | ₹0 | ₹9 | Flat per order, any quantity up to freeze limit |
| Equity Options — Index & Stock Options | ₹0 | ₹9 | Flat per order — not per lot |
| Commodity Futures (MCX) | ₹0 | ₹9 | Gold, silver, crude oil, natural gas & more |
| Commodity Options (MCX) | ₹0 | ₹9 | Flat per order |
| IPO applications | ₹0 | ₹0 | Apply via UPI mandate from the app |
Broker charges
Charges set by Maitra Wealth. Brokerage is on the table above; these are the others.
| Charge | Applies to | Rate |
|---|---|---|
| Account opening | New Nova accounts | ₹0 |
| Demat AMC | Annual maintenance | ₹0 — free for lifetime |
| Clearing charges | Cash / Intraday / Delivery | ₹75 per crore |
| Clearing charges | Futures | ₹200 per crore |
| Clearing charges | Options | ₹5,000 per crore |
| DP charges (CDSL) | Per scrip, on sell from demat | ₹50 per scrip |
| Margin pledge / unpledge | Per ISIN | ₹30 + GST / per ISIN |
| MTF interest | Margin Trading Facility (optional) | 18% p.a. |
Statutory & exchange charges
Levied by the government, exchanges and regulator, and the same at every broker in India. Maitra does not control or profit from these levies.
| Charge | Applies to | Rate |
|---|---|---|
| STT / CTT | Equity, F&O, Commodities | As notified by Govt. of India |
| Stamp duty | Buy side, all segments | As per Indian Stamp Act |
| Exchange transaction charges | NSE / BSE / MCX | As levied by the exchange |
| SEBI turnover fee | All segments | ₹10 per crore |
| GST | Brokerage, DP, exchange & SEBI charges | 18% |
Full tariff schedule available on request. Try the brokerage calculator →
Nova pricing, answered
Still have a question? Call 044-45630555 or write to info@maitrawealth.com.
Is brokerage really zero for 30 days?
Yes. Every executed order in every segment carries ₹0 brokerage for 30 days from the date your account is activated for trading.
Which segments does the offer cover?
What happens after 30 days?
Is ₹9 charged per lot or per order?
Is there an account opening fee or AMC?
Do I still pay statutory charges during the offer?
Do I pay extra for TradingView charts or option tools?
What is Nova?
What does NOVA stand for?
Who is Maitra Wealth?
Get a callback in your language
Leave your number and our team will call you back to answer your questions about Nova. Prefer to chat? Message us on WhatsApp.
Start with ₹0 brokerage for 30 days.
Open your account online in minutes. ₹0 account opening, lifetime-free Demat AMC, TradingView charts and the full Nova toolkit included.
/* Maitra Nova page scripts. Single source: index.html no longer carries an inline copy. */
(function () {
if (window.__novaReady) return;
window.__novaReady = 1;
var $ = function (i) { return document.getElementById(i); };
var CFG = window.NOVA_CONFIG || {};
var reduceMotion = window.matchMedia && matchMedia('(prefers-reduced-motion:reduce)').matches;
/* 0. Analytics (loads only if a GA4 ID is set in NOVA_CONFIG) */
function track(name, params) {
try { if (window.gtag) window.gtag('event', name, params || {}); } catch (e) {}
}
if (CFG.ga4 && /^G-[A-Z0-9]+$/.test(CFG.ga4)) {
var g = document.createElement('script');
g.async = true;
g.src = 'https://www.googletagmanager.com/gtag/js?id=' + CFG.ga4;
document.head.appendChild(g);
window.dataLayer = window.dataLayer || [];
window.gtag = function () { window.dataLayer.push(arguments); };
window.gtag('js', new Date());
window.gtag('config', CFG.ga4);
}
document.addEventListener('click', function (e) {
var a = e.target.closest && e.target.closest('[data-ev]');
if (a) track(a.getAttribute('data-ev'), { link_url: a.href || '' });
});
/* 1. WhatsApp buttons: shown only when a number is configured */
(function () {
var n = (CFG.whatsapp || '').replace(/\D/g, '');
if (n.length === 10) n = '91' + n;
if (n.length < 11) return;
var href = 'https://wa.me/' + n + '?text=' + encodeURIComponent(CFG.whatsappText || 'Hi, I would like to know more about Maitra Nova.');
[].forEach.call(document.querySelectorAll('[data-wa]'), function (a) { a.href = href; a.hidden = false; });
})();
/* 2. Brokerage calculator chips */
(function () {
var f = function (v) { return '₹' + v.toLocaleString('en-IN'); };
var b = document.querySelectorAll('.chip');
if (!b.length) return;
function set(n) {
var o = n * 22;
$('c20').textContent = f(o * 20);
$('save1').textContent = f(o * 20);
$('orders').textContent = o;
$('c9').textContent = f(o * 9);
$('saveM').textContent = f(o * 11);
[].forEach.call(b, function (x) { x.classList.toggle('on', +x.dataset.n === n); });
}
[].forEach.call(b, function (x) { x.addEventListener('click', function () { set(+x.dataset.n); }); });
})();
/* 3. Mobile menu */
(function () {
var h = document.querySelector('.hdr'), b = document.querySelector('.burger');
if (!h || !b) return;
function close() { h.classList.remove('open'); b.setAttribute('aria-expanded', 'false'); }
b.addEventListener('click', function () {
var o = h.classList.toggle('open');
b.setAttribute('aria-expanded', o ? 'true' : 'false');
});
[].forEach.call(h.querySelectorAll('.nav a'), function (a) { a.addEventListener('click', close); });
window.addEventListener('resize', function () { if (window.innerWidth > 960) close(); });
})();
/* 4. In-page anchors: smooth scroll, never navigate away (even if the host adds a
<?php /* * Nova callback form handler (HostGator / PHP). * Emails the request to $TO. Nothing is stored on the server, so no client * data sits in a web-accessible folder. * * BEFORE GO-LIVE: * 1. Confirm $TO (who receives leads). * 2. Make $FROM a real mailbox on maitrawealth.com (create it in cPanel > Email Accounts) * so SPF/DKIM pass and mail does not land in spam. * 3. Cloudflare Turnstile: paste your SECRET key into $TURNSTILE_SECRET. The public SITE key * goes in NOVA_CONFIG.turnstile in index.html, never here. Never put the secret in the web * page. If the secret is empty the form refuses every submission (fails closed). */ $TO = 'info@maitrawealth.com'; $FROM = 'noreply@maitrawealth.com'; $HOST = 'nova.maitrawealth.com'; $LIMIT_PER_HOUR = 5; $TURNSTILE_SECRET = '0x4AAAAAAFJ7Wty62DrzxAnVsBfkSYdco-8'; // Cloudflare Turnstile SECRET key (server only) $TURNSTILE_VERIFY_URL = 'https://challenges.cloudflare.com/turnstile/v0/siteverify'; header('Content-Type: application/json; charset=utf-8'); header('X-Content-Type-Options: nosniff'); header('Cache-Control: no-store'); function out($ok, $error = null, $code = 200) { http_response_code($code); echo json_encode($error ? ['ok' => $ok, 'error' => $error] : ['ok' => $ok]); exit; } function clean($v, $max) { $v = is_string($v) ? $v : ''; $v = preg_replace('/[\x00-\x1F\x7F]+/u', ' ', $v); $v = trim($v); return mb_substr($v, 0, $max, 'UTF-8'); } // Visitor IP. Behind Cloudflare the real visitor IP is in CF-Connecting-IP (REMOTE_ADDR is Cloudflare's). function client_ip() { foreach (['HTTP_CF_CONNECTING_IP', 'REMOTE_ADDR'] as $k) { $v = $_SERVER[$k] ?? ''; if ($v !== '' && filter_var($v, FILTER_VALIDATE_IP)) return $v; } return '0'; } if (($_SERVER['REQUEST_METHOD'] ?? '') !== 'POST') out(false, 'method', 405); // Same-site requests only $src = $_SERVER['HTTP_ORIGIN'] ?? ($_SERVER['HTTP_REFERER'] ?? ''); if ($src !== '' && !in_array(parse_url($src, PHP_URL_HOST), [$HOST, 'www.' . $HOST], true)) out(false, 'origin', 403); // Honeypot: bots fill it. Pretend success. if (!empty($_POST['website'])) out(true); // Too-fast submissions (under 3 seconds after page load) are treated as bots $ts = (int)($_POST['ts'] ?? 0); if ($ts > 0 && (time() * 1000 - $ts) < 3000) out(false, 'fast', 400); // Validate $name = clean($_POST['name'] ?? '', 80); $mobile = preg_replace('/\D/', '', $_POST['mobile'] ?? ''); if (strlen($mobile) === 12 && strpos($mobile, '91') === 0) $mobile = substr($mobile, 2); elseif (strlen($mobile) === 11 && $mobile[0] === '0') $mobile = substr($mobile, 1); $langs = ['English','Hindi','Tamil','Telugu','Kannada','Malayalam','Bengali','Marathi','Gujarati','Punjabi']; $interests= ['Not sure yet','Equity trading','Futures & options','Commodities (MCX)','Mutual funds, SIPs & bonds']; $lang = in_array($_POST['lang'] ?? '', $langs, true) ? $_POST['lang'] : 'English'; $interest = in_array($_POST['interest'] ?? '', $interests, true) ? $_POST['interest'] : 'Not sure yet'; if (mb_strlen($name, 'UTF-8') < 2 || preg_match('/[<>]/', $name)) out(false, 'name', 400); if (!preg_match('/^[6-9][0-9]{9}$/', $mobile)) out(false, 'mobile', 400); if (($_POST['consent'] ?? '') !== 'yes') out(false, 'consent', 400); // Cloudflare Turnstile (fails closed: not configured, missing token, network error or invalid token = refuse) function ts_verify($url, $secret, $token, $ip) { $post = http_build_query(['secret' => $secret, 'response' => $token, 'remoteip' => $ip]); $res = false; $why = ''; if (function_exists('curl_init')) { $ch = curl_init($url); curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_POSTFIELDS => $post, CURLOPT_RETURNTRANSFER => true, CURLOPT_CONNECTTIMEOUT => 4, CURLOPT_TIMEOUT => 6, CURLOPT_HTTPHEADER => ['Content-Type: application/x-www-form-urlencoded']]); $res = curl_exec($ch); if ($res === false) $why = 'curl-' . curl_errno($ch) . ': ' . curl_error($ch); else { $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($code !== 200) $why = 'http-' . $code; } curl_close($ch); } else { $ctx = stream_context_create(['http' => ['method' => 'POST', 'timeout' => 6, 'header' => "Content-Type: application/x-www-form-urlencoded\r\n", 'content' => $post]]); $res = @file_get_contents($url, false, $ctx); if ($res === false) $why = 'no-curl-and-fopen-failed'; } if (!is_string($res) || $res === '') return [false, 'unreachable: ' . ($why ?: 'empty response')]; $j = json_decode($res, true); if (!is_array($j)) return [false, 'bad-response' . ($why ? ' (' . $why . ')' : '')]; if (($j['success'] ?? false) === true) return [true, '']; $codes = isset($j['error-codes']) && is_array($j['error-codes']) ? implode(',', array_map('strval', $j['error-codes'])) : 'unknown'; return [false, $codes]; } if ($TURNSTILE_SECRET === '') out(false, 'captcha_config', 500); $token = $_POST['cf-turnstile-response'] ?? ''; if (!is_string($token) || $token === '' || strlen($token) > 2048) out(false, 'captcha', 400); list($tsOk, $tsWhy) = ts_verify($TURNSTILE_VERIFY_URL, $TURNSTILE_SECRET, $token, client_ip()); if (!$tsOk) { error_log('nova callback: Turnstile rejected: ' . $tsWhy); // $tsWhy is only a Cloudflare error code or a connection error: safe to show while setting up. Remove this line once it works. http_response_code(400); // echo json_encode(['ok' => false, 'error' => 'captcha', 'detail' => $tsWhy]); echo json_encode(['ok' => false, 'error' => 'captcha']); exit; } // Rate limit per IP (stores only a salted hash, never the IP or any lead data) $ip = client_ip(); $key = sys_get_temp_dir() . '/nova_rl_' . hash('sha256', $ip . __FILE__); $now = time(); $hits = []; if (is_file($key)) { $hits = array_filter(array_map('intval', explode(',', (string)@file_get_contents($key))), function ($t) use ($now) { return $now - $t < 3600; }); } if (count($hits) >= $LIMIT_PER_HOUR) out(false, 'rate', 429); $hits[] = $now; @file_put_contents($key, implode(',', $hits), LOCK_EX); // Compose (subject and headers are constants: no user input, so no header injection) $utm = []; foreach (['utm_source','utm_medium','utm_campaign','utm_content','utm_term'] as $k) { $v = clean($_POST[$k] ?? '', 100); if ($v !== '') $utm[] = "$k: $v"; } $body = "New Nova callback request\n" . "-------------------------\n" . "Name: $name\n" . "Mobile: +91$mobile\n" . "Preferred language: $lang\n" . "Interested in: $interest\n" . "Consent to be contacted: yes\n" . "Received: " . date('Y-m-d H:i:s') . " (server time)\n" . ($utm ? "Source: " . implode(', ', $utm) . "\n" : ''); $headers = "From: Nova Website <$FROM>\r\nContent-Type: text/plain; charset=UTF-8\r\nX-Mailer: nova-callback"; $sent = @mail($TO, '=?UTF-8?B?' . base64_encode('Nova callback request') . '?=', $body, $headers, '-f' . $FROM); if (!$sent) out(false, 'mail', 500); out(true);
