Methodology
How Takhfif collects, verifies, scores, and updates bank card discount data. Last data refresh: 27 May 2026.
Takhfif tracks card discounts from 21 Pakistani bank and wallet providers at 2,161 distinct places across 594 cities. Every figure on the site is computed directly from this dataset at request time, not hand-curated. Place counts, average discounts, and the card rankings all come from the same source. This page explains exactly how that dataset is built and how the numbers are derived.
Where the data comes from
Discount records are collected directly from official bank sources: the discount programs, card-benefit pages, and partner listings each bank publishes. We do not pull deals from social media or unverified third-party blogs. Every one of the deal records we currently track carries a source URL pointing back to the originating bank page, so each entry can be checked independently.
For each bank, our pipeline maps the cities it operates in, then the merchants in each city, then the detailed offer for each merchant. A single merchant offer is expanded into one record per card, because the same restaurant can offer different terms on a bank's Classic, Gold, and Platinum cards. Cap amounts and minimum-spend thresholds are parsed out of the offer text when they are not provided as structured fields.
The banks and wallets currently covered: Askari Bank, Bank Al Habib, HBL Islamic, HBL, Allied Bank, Meezan Bank, EasyPaisa, Bank Alfalah, MCB Bank, Bank of Punjab, Faysal Bank, Al Baraka Bank, JS Bank, UBL, MCB Islamic, Standard Chartered, Dubai Islamic Bank, Habib Metro Bank, Soneri Bank, Bank Islami, JazzCash.
How freshness is determined
An automated pipeline re-checks every bank source every night at midnight Pakistan time and rebuilds the entire dataset from the ground up. Each deal stores a last_seen date, the last time that exact offer was observed at its source. Freshness is then a simple function of how long ago that was:
- Fresh: seen within the last 24 hours.
- Recent: seen within the last 7 days.
- Stale: not seen in over 7 days.
A staledeal is one our most recent checks have stopped finding at the bank's source. It is not deleted immediately, since banks reorganise their pages and offers reappear, but it is weighted down in the rankings until it is re-confirmed. Deals confirmed to be expired or removed by the bank drop out of the active listings entirely.
How discounts are scored and ranked
The headline percentage a bank advertises is rarely what you actually save. A “30% off” deal capped at PKR 300 on a PKR 5,000 minimum spend is worth about 6% in practice. So before comparing cards, every deal is converted into a real place value:
place_value = discount_percent
× cap_factor
× freshness_factor
× expiry_factor- Cap factor:
min(1, cap ÷ (reference_spend × discount%)), using the deal's minimum spend as the reference spend, or PKR 3,000 when none is set. A cap that bites hard drags the effective discount down. - Freshness factor: 1.0 for fresh deals, 0.9 for recent, 0.7 for stale.
- Expiry factor:
min(1, days_left ÷ 30), full value when 30+ days remain, ramping linearly to 0 at expiry. Deals with no stated expiry are treated as ongoing.
Each card is then deduplicated to its best offer per place: a chain in 30 cities counts as a single place, so breadth can't be inflated by repetition. A card's overall score combines two axes, each log-normalised so a single outlier card can't flatten everyone else:
breadth_norm = log1p(unique_places) ÷ log1p(max_unique_places) depth_norm = log1p(median place_value) ÷ log1p(global_max_median) score = 100 × sqrt(breadth_norm × depth_norm)
We also publish a savings index, log1p(sum of place values), as a single “how much can this card save me overall” number. The displayed score is rounded to one decimal place. Cards covering fewer than 5 distinct placesare excluded from the rankings because there isn't enough coverage to compare them fairly; 228 cards currently qualify.