{
 "name": "FirstPass Memo red-flag checker rules",
 "version": "2026-10-07",
 "updated": "2026-10-07",
 "url": "https://firstpassmemo.com/flags/",
 "checker": "https://firstpassmemo.com/checker/",
 "license": "https://creativecommons.org/licenses/by/4.0/",
 "note": "Plain rules applied to a listing's own figures and text. Informational screening, not advice.",
 "changelog": [
  {
   "date": "2026-10-07",
   "change": "First publication: 33 rules."
  }
 ],
 "rules": [
  {
   "code": "NO_PRICE",
   "title": "No asking price",
   "group": "Price and earnings",
   "severity": "HIGH",
   "when": "Raised as high severity when the checker finds no asking price in the pasted text and none is typed into the price box.",
   "url": "https://firstpassmemo.com/flags/no-asking-price/"
  },
  {
   "code": "NO_PROFIT",
   "title": "No profit figure",
   "group": "Price and earnings",
   "severity": "HIGH",
   "when": "Raised as high severity when the listing gives no monthly, annual or last-month profit. If it gives MRR, the checker uses MRR as an upper bound for payback and says so; if it gives nothing, payback is not shown.",
   "url": "https://firstpassmemo.com/flags/no-profit-figure/"
  },
  {
   "code": "NO_EARNINGS",
   "title": "Zero or negative profit",
   "group": "Price and earnings",
   "severity": "HIGH",
   "when": "Raised as high severity when the profit figure the checker uses is zero or below. The checker reads only positive profit from pasted text, so this flag comes from a zero or negative figure typed into the monthly profit box.",
   "url": "https://firstpassmemo.com/flags/zero-or-negative-profit/"
  },
  {
   "code": "TOO_CHEAP",
   "title": "Priced below one year of profit",
   "group": "Price and earnings",
   "severity": "MED",
   "when": "Raised as medium severity when the asking price is less than 12 months of the profit figure the checker uses (an annual multiple below 1).",
   "url": "https://firstpassmemo.com/flags/priced-below-one-year-of-profit/"
  },
  {
   "code": "RICH_MULTIPLE",
   "title": "Multiple above the typical range",
   "group": "Price and earnings",
   "severity": "MED",
   "when": "Raised as medium severity when the annual multiple (price divided by 12 months of profit) is above the 75th percentile of the checker's benchmark range for the listing's category.",
   "url": "https://firstpassmemo.com/flags/asking-multiple-above-typical-range/"
  },
  {
   "code": "LAST_MONTH_ZERO",
   "title": "Last month at or below zero",
   "group": "Trend",
   "severity": "HIGH",
   "when": "Raised as high severity when last month's profit is zero or below while the monthly or annual profit figure is positive.",
   "url": "https://firstpassmemo.com/flags/last-month-profit-zero-or-negative/"
  },
  {
   "code": "PROFIT_DECLINE",
   "title": "Last month below the average",
   "group": "Trend",
   "severity": "MED or HIGH",
   "when": "Raised when last month's profit is more than 20% below the stated average monthly profit: medium severity from 20%, high severity above 35%.",
   "url": "https://firstpassmemo.com/flags/last-month-profit-below-average/"
  },
  {
   "code": "REV_TREND",
   "title": "Revenue declining",
   "group": "Trend",
   "severity": "MED or HIGH",
   "when": "Raised when the listing states a decline of 20% or more in revenue, sales, profit or income: medium severity from 20%, high severity from 30%.",
   "url": "https://firstpassmemo.com/flags/revenue-declining/"
  },
  {
   "code": "SHORT_PERIOD",
   "title": "Short averaging window",
   "group": "Trend",
   "severity": "MED",
   "when": "Raised as medium severity when the listing says its figures cover the past or last N months, with N under 12.",
   "url": "https://firstpassmemo.com/flags/earnings-averaged-over-short-period/"
  },
  {
   "code": "ARR_MRR",
   "title": "ARR and MRR disagree",
   "group": "Numbers that disagree",
   "severity": "MED",
   "when": "Raised as medium severity when stated ARR differs from stated MRR × 12 by more than 15%.",
   "url": "https://firstpassmemo.com/flags/arr-and-mrr-disagree/"
  },
  {
   "code": "ARR_VS_TTM",
   "title": "ARR far above trailing revenue",
   "group": "Numbers that disagree",
   "severity": "MED",
   "when": "Raised as medium severity when stated ARR is more than 1.5 times trailing 12-month revenue.",
   "url": "https://firstpassmemo.com/flags/arr-far-above-trailing-revenue/"
  },
  {
   "code": "MRR_VS_COLLECTED",
   "title": "MRR above collected revenue",
   "group": "Numbers that disagree",
   "severity": "MED",
   "when": "Raised as medium severity when stated MRR is more than 1.15 times last month's revenue.",
   "url": "https://firstpassmemo.com/flags/mrr-above-revenue-collected/"
  },
  {
   "code": "MONTHLY_VS_TTM",
   "title": "Monthly and annual revenue disagree",
   "group": "Numbers that disagree",
   "severity": "LOW",
   "when": "Raised as low severity when monthly revenue × 12 differs from trailing 12-month revenue by more than 10%.",
   "url": "https://firstpassmemo.com/flags/monthly-revenue-does-not-match-annual/"
  },
  {
   "code": "PROFIT_GT_REV",
   "title": "Profit higher than revenue",
   "group": "Numbers that disagree",
   "severity": "HIGH",
   "when": "Raised as high severity when the profit figure is more than 1% above the revenue figure for the same period.",
   "url": "https://firstpassmemo.com/flags/profit-higher-than-revenue/"
  },
  {
   "code": "HIGH_MARGIN",
   "title": "Margin above 90%",
   "group": "Numbers that disagree",
   "severity": "MED",
   "when": "Raised as medium severity when profit is more than 90% of revenue (profit above revenue raises a separate high-severity flag).",
   "url": "https://firstpassmemo.com/flags/very-high-margin/"
  },
  {
   "code": "NO_CHURN",
   "title": "No churn figure",
   "group": "Customers and retention",
   "severity": "MED",
   "when": "Raised as medium severity when the listing looks like recurring revenue (SaaS, subscription, membership, newsletter or MRR) and gives no churn figure.",
   "url": "https://firstpassmemo.com/flags/no-churn-figure/"
  },
  {
   "code": "CHURN",
   "title": "Churn above 5% a month",
   "group": "Customers and retention",
   "severity": "MED or HIGH",
   "when": "Raised when stated monthly churn is above 5%: medium severity above 5%, high severity at 10% or more.",
   "url": "https://firstpassmemo.com/flags/monthly-churn-above-5-percent/"
  },
  {
   "code": "FEW_CUSTOMERS",
   "title": "Few paying customers",
   "group": "Customers and retention",
   "severity": "MED",
   "when": "Raised as medium severity when a recurring-revenue listing states fewer than 25 paying customers.",
   "url": "https://firstpassmemo.com/flags/few-paying-customers/"
  },
  {
   "code": "CONCENTRATION",
   "title": "Top customer above 25%",
   "group": "Customers and retention",
   "severity": "HIGH",
   "when": "Raised as high severity when the listing states that the top customer, client or account is more than 25% of revenue.",
   "url": "https://firstpassmemo.com/flags/top-customer-over-25-percent/"
  },
  {
   "code": "CONC_UNKNOWN",
   "title": "Concentration not disclosed",
   "group": "Customers and retention",
   "severity": "LOW",
   "when": "Raised as low severity when the listing gives no top-customer or top-partner share.",
   "url": "https://firstpassmemo.com/flags/concentration-not-disclosed/"
  },
  {
   "code": "SEO_DEPENDENT",
   "title": "Search-dependent traffic",
   "group": "Traffic and platforms",
   "severity": "MED",
   "when": "Raised as medium severity when organic search is more than 50% of stated traffic.",
   "url": "https://firstpassmemo.com/flags/organic-search-over-half-of-traffic/"
  },
  {
   "code": "CHANNEL_CONC",
   "title": "One channel above 60%",
   "group": "Traffic and platforms",
   "severity": "MED",
   "when": "Raised as medium severity when one traffic channel other than organic search (paid, social, direct, referral or email) is more than 60% of stated traffic. Organic search has its own flag.",
   "url": "https://firstpassmemo.com/flags/one-channel-over-60-percent-of-traffic/"
  },
  {
   "code": "CLAIM_SEO_VS_DATA",
   "title": "SEO claim versus the data",
   "group": "Traffic and platforms",
   "severity": "HIGH",
   "when": "Raised as high severity when the listing text credits search, SEO or organic acquisition and the traffic split shows organic search under 20%.",
   "url": "https://firstpassmemo.com/flags/claims-seo-growth-but-search-is-small/"
  },
  {
   "code": "PLATFORM",
   "title": "Platform dependence",
   "group": "Traffic and platforms",
   "severity": "MED",
   "when": "Raised as medium severity when the listing mentions a platform the business relies on: Amazon, Google Search (only when no traffic split is given), Meta, YouTube, TikTok, Etsy, the Shopify App Store, the Chrome Web Store, the App Store, an ad network, Google Maps or an AI model API.",
   "url": "https://firstpassmemo.com/flags/depends-on-a-platform/"
  },
  {
   "code": "NO_TRAFFIC",
   "title": "No traffic data",
   "group": "Traffic and platforms",
   "severity": "MED",
   "when": "Raised as medium severity when the listing looks like a content, affiliate, display-ad or YouTube business and gives no traffic split and no pageviews, visitors or sessions.",
   "url": "https://firstpassmemo.com/flags/no-traffic-data/"
  },
  {
   "code": "UNVERIFIED",
   "title": "No connected data source",
   "group": "Verification, age and operations",
   "severity": "MED",
   "when": "Raised as medium severity when the listing mentions no verified or connected source, for example \"Stripe verified\", \"connected Google Analytics\" or a marketplace verification badge.",
   "url": "https://firstpassmemo.com/flags/no-connected-data-source/"
  },
  {
   "code": "NO_AGE",
   "title": "Business age not stated",
   "group": "Verification, age and operations",
   "severity": "MED",
   "when": "Raised as medium severity when no founding date, launch date or business age is found.",
   "url": "https://firstpassmemo.com/flags/business-age-not-stated/"
  },
  {
   "code": "TOO_YOUNG",
   "title": "Under 6 months old",
   "group": "Verification, age and operations",
   "severity": "HIGH",
   "when": "Raised as high severity when the business is under 6 months old.",
   "url": "https://firstpassmemo.com/flags/under-6-months-of-history/"
  },
  {
   "code": "YOUNG",
   "title": "Under 12 months old",
   "group": "Verification, age and operations",
   "severity": "MED",
   "when": "Raised as medium severity when the business is at least 6 but under 12 months old. Under 6 months raises the high-severity flag instead.",
   "url": "https://firstpassmemo.com/flags/under-12-months-of-history/"
  },
  {
   "code": "NO_HOURS",
   "title": "Owner hours not stated",
   "group": "Verification, age and operations",
   "severity": "MED",
   "when": "Raised as medium severity when the listing gives no hours per week.",
   "url": "https://firstpassmemo.com/flags/owner-hours-not-stated/"
  },
  {
   "code": "HOURS",
   "title": "More than 10 hours a week",
   "group": "Verification, age and operations",
   "severity": "MED",
   "when": "Raised as medium severity when the stated owner hours are more than 10 a week.",
   "url": "https://firstpassmemo.com/flags/owner-works-over-10-hours-a-week/"
  },
  {
   "code": "PASSIVE_VS_STAFF",
   "title": "Passive, but staffed",
   "group": "Verification, age and operations",
   "severity": "MED",
   "when": "Raised as medium severity when the text uses words like passive, hands-off or turnkey and also mentions contractors, freelancers, writers, developers, VAs, staff or a team.",
   "url": "https://firstpassmemo.com/flags/called-passive-but-relies-on-staff/"
  },
  {
   "code": "GENERIC_REASON",
   "title": "Generic reason for sale",
   "group": "Verification, age and operations",
   "severity": "LOW",
   "when": "Raised as low severity when the stated reason for sale mentions other opportunities, new projects or focusing on something else.",
   "url": "https://firstpassmemo.com/flags/generic-reason-for-sale/"
  }
 ]
}
