<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eddie Glush</title>
    <description>The latest articles on DEV Community by Eddie Glush (@eddie_glush_60e960e585bf8).</description>
    <link>https://dev.to/eddie_glush_60e960e585bf8</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3520261%2F611fb7c4-f106-4327-9b15-7a2d4b3d2c5b.png</url>
      <title>DEV Community: Eddie Glush</title>
      <link>https://dev.to/eddie_glush_60e960e585bf8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eddie_glush_60e960e585bf8"/>
    <language>en</language>
    <item>
      <title>Millions of odds snapshots: what the bookmaker margin actually looks like</title>
      <dc:creator>Eddie Glush</dc:creator>
      <pubDate>Fri, 18 Sep 2026 03:53:56 +0000</pubDate>
      <link>https://dev.to/eddie_glush_60e960e585bf8/millions-of-odds-snapshots-what-the-bookmaker-margin-actually-looks-like-24l4</link>
      <guid>https://dev.to/eddie_glush_60e960e585bf8/millions-of-odds-snapshots-what-the-bookmaker-margin-actually-looks-like-24l4</guid>
      <description>&lt;p&gt;The price of placing a bet is never printed anywhere. There is no line item, no fee, no receipt. It is folded into the odds themselves: both sides of a coin flip pay less than even money, and the gap is what the bookmaker keeps. That gap, the margin or overround, is the single most important number in betting, and almost nobody measures it.&lt;/p&gt;

&lt;p&gt;So we did, continuously, and published the result as a daily index with a free CSV.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the numbers say
&lt;/h2&gt;

&lt;p&gt;Two things are on the site. The &lt;strong&gt;Margin Index&lt;/strong&gt; is a live daily panel; on the day this was written (17 September 2026, 79 days into the series) it measured &lt;strong&gt;2,747,603 markets across 68 bookmakers in a single day&lt;/strong&gt;, with a headline two-outcome margin of &lt;strong&gt;4.92%&lt;/strong&gt;. The &lt;strong&gt;State of the Vig 2026&lt;/strong&gt; quarterly report is the fixed summary: &lt;strong&gt;69.6 million pre-match market observations across 53 bookmakers and 14 sports&lt;/strong&gt;, 1 July to 8 September 2026.&lt;/p&gt;

&lt;p&gt;The clearest finding is that &lt;strong&gt;the type of bet matters far more than the sport&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Market type&lt;/th&gt;
&lt;th&gt;Mean margin&lt;/th&gt;
&lt;th&gt;Markets that day&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Head-to-head (two outcomes)&lt;/td&gt;
&lt;td&gt;4.92%&lt;/td&gt;
&lt;td&gt;415,503&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Handicaps / spreads&lt;/td&gt;
&lt;td&gt;5.11%&lt;/td&gt;
&lt;td&gt;517,201&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Totals (over / under)&lt;/td&gt;
&lt;td&gt;5.94%&lt;/td&gt;
&lt;td&gt;827,759&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Match result (three outcomes)&lt;/td&gt;
&lt;td&gt;7.19%&lt;/td&gt;
&lt;td&gt;668,945&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Player props&lt;/td&gt;
&lt;td&gt;7.65%&lt;/td&gt;
&lt;td&gt;305,981&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Read that as a price ladder. The simpler the bet, the less it costs. A player prop carries roughly 60% more margin than a simple who-wins bet, 7.6% against 4.8% on the quarter's numbers, and props are simultaneously the fastest-growing market type. In the quarterly panel, props were 23.8 million of the 69.6 million observations.&lt;/p&gt;

&lt;p&gt;A third outcome is expensive too. Three-way match-result markets, where a draw is possible, ran at about 7.5% over the quarter, half again the two-outcome figure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The sport gap is real, and bigger than people assume
&lt;/h2&gt;

&lt;p&gt;Same bet type, two-outcome who-wins, split by sport, on the latest day measured:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sport&lt;/th&gt;
&lt;th&gt;Margin&lt;/th&gt;
&lt;th&gt;Cost on $100&lt;/th&gt;
&lt;th&gt;Markets&lt;/th&gt;
&lt;th&gt;Books&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NFL&lt;/td&gt;
&lt;td&gt;4.36%&lt;/td&gt;
&lt;td&gt;$4.36&lt;/td&gt;
&lt;td&gt;52,100&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;College football&lt;/td&gt;
&lt;td&gt;4.43%&lt;/td&gt;
&lt;td&gt;$4.43&lt;/td&gt;
&lt;td&gt;100,933&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MLB&lt;/td&gt;
&lt;td&gt;4.70%&lt;/td&gt;
&lt;td&gt;$4.70&lt;/td&gt;
&lt;td&gt;64,330&lt;/td&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NHL&lt;/td&gt;
&lt;td&gt;4.93%&lt;/td&gt;
&lt;td&gt;$4.93&lt;/td&gt;
&lt;td&gt;37,270&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UFC / MMA&lt;/td&gt;
&lt;td&gt;5.02%&lt;/td&gt;
&lt;td&gt;$5.02&lt;/td&gt;
&lt;td&gt;41,366&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NRL&lt;/td&gt;
&lt;td&gt;5.28%&lt;/td&gt;
&lt;td&gt;$5.28&lt;/td&gt;
&lt;td&gt;4,129&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NBA&lt;/td&gt;
&lt;td&gt;6.00%&lt;/td&gt;
&lt;td&gt;$6.00&lt;/td&gt;
&lt;td&gt;61,611&lt;/td&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Over the full quarter the pattern is the same and the spread is wider: baseball was the cheapest sport to bet at 4.34%, and T20 international cricket the dearest at 6.24%, about 44% more margin on the same kind of bet. The big American leagues cluster tightly between 4.3% and 4.7%, which is what competition does to a price: those are the markets where the most bookmakers are quoting.&lt;/p&gt;

&lt;p&gt;The quarter also caught a seasonal move. Spreads went from 4.96% in July to 5.73% by early September, and totals from 5.57% to 6.37%, as NFL and college football lines came online and displaced the baseball lines that dominated July. Football lines simply carry more margin.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it is measured
&lt;/h2&gt;

&lt;p&gt;For every bookmaker quote on every market, convert each price to an implied probability (1 ÷ decimal price), sum them, and subtract 100%. A fair market sums to 1.00; the surplus is the margin. Every quote is a separate observation, so a market quoted by 40 bookmakers contributes 40 measurements rather than one blended average. That matters, because the average of a cheap book and an expensive book is a price nobody can actually get.&lt;/p&gt;

&lt;p&gt;Handicap markets are paired on the absolute value of the line, since the two sides carry opposite numbers. Observations resolving outside 0–30% are mispaired or stale quotes and are dropped; on the latest day that filter removed at most 0.63% of observations in any market type. In-play prices, suspended markets and betting exchanges (which charge commission instead of margin) are excluded from the quarterly report.&lt;/p&gt;

&lt;p&gt;The index publishes aggregates only, no odds, no prices, no bookmaker identities, which is exactly why it can be given away under CC BY without redistributing licensed market data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use the data
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;io&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;StringIO&lt;/span&gt;

&lt;span class="n"&gt;URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://betbetter.world/studies/margin-index?format=csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User-Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;margin-demo/1.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;

&lt;span class="c1"&gt;# two leading '#' lines carry the source and licence
&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;StringIO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tolist&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="c1"&gt;# ['as_of_date', 'market_class', 'shape', 'markets_n', 'books_n',
#  'mean_pct', 'median_pct', 'dropped_pct']
&lt;/span&gt;
&lt;span class="c1"&gt;# margin by market class, weighted by how many markets were measured
&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mean_pct&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;markets_n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
       &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;market_class&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shape&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])[[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;num&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;markets_n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]].&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;markets_n&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# the headline series: two-outcome head-to-head, day by day
&lt;/span&gt;&lt;span class="n"&gt;h2h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;market_class&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;h2h&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2way&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h2h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;as_of_date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;mean_pct&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Links and citation&lt;br&gt;
Daily Margin Index (and the CSV): &lt;a href="https://betbetter.world/studies/margin-index" rel="noopener noreferrer"&gt;https://betbetter.world/studies/margin-index&lt;/a&gt;&lt;br&gt;
State of the Vig 2026, Q3: &lt;a href="https://betbetter.world/studies/state-of-the-vig-2026" rel="noopener noreferrer"&gt;https://betbetter.world/studies/state-of-the-vig-2026&lt;/a&gt;&lt;br&gt;
Market calibration study: &lt;a href="https://betbetter.world/studies/market-calibration" rel="noopener noreferrer"&gt;https://betbetter.world/studies/market-calibration&lt;/a&gt;&lt;br&gt;
Our publicly graded record, losses included: &lt;a href="https://betbetter.world/results" rel="noopener noreferrer"&gt;https://betbetter.world/results&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Suggested citation: Glush, E. (2026). The Bet Better Margin Index: daily measured bookmaker margins across market types. Bet Better. &lt;a href="https://betbetter.world/studies/margin-index" rel="noopener noreferrer"&gt;https://betbetter.world/studies/margin-index&lt;/a&gt;&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>sports</category>
      <category>statistics</category>
      <category>sportsbetting</category>
    </item>
    <item>
      <title>How we grade hundreds of sports picks a day in public</title>
      <dc:creator>Eddie Glush</dc:creator>
      <pubDate>Fri, 18 Sep 2026 03:33:01 +0000</pubDate>
      <link>https://dev.to/eddie_glush_60e960e585bf8/how-we-grade-hundreds-of-sports-picks-a-day-in-public-3866</link>
      <guid>https://dev.to/eddie_glush_60e960e585bf8/how-we-grade-hundreds-of-sports-picks-a-day-in-public-3866</guid>
      <description>&lt;p&gt;Most sports prediction sites will tell you how good they are. Very few will show you the losses. We decided early that our record would be a public page rather than a marketing claim, and that decision ended up shaping the whole pipeline. This is a write-up of how the grading works, what it costs, and what we learned when we pointed the same machinery at the betting market itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shape of the pipeline
&lt;/h2&gt;

&lt;p&gt;There are four stages, and each one is a table you can query.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Publish before the game.&lt;/strong&gt; A pick only counts if it exists before the event starts. Models run on a schedule, write their selections to a table, and every row is stamped with the time it was written and the price that was on screen at that moment. Nothing is allowed to be added later. This is the part everyone skips, and it is the only part that matters: a record that can be edited after the result is not a record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Wait for the official result.&lt;/strong&gt; A separate job pulls final scores. Scores arrive messy: a game is postponed, a player withdraws, a line is voided, two feeds disagree on whether the match went to extra time. Every one of those cases needs an explicit rule written down in advance, not a judgement call made when you can already see whether the pick was going to win.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Grade.&lt;/strong&gt; Join picks to final scores, apply the market rule (did the total go over, did the side cover, did the favourite win), and write win, loss or void. A pick graded once is frozen. We do not regrade history when a model changes; the old era's record stays as it was, closed and dated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Show it.&lt;/strong&gt; The graded rows go straight onto a public page, newest first, with the price we published, the result, and what $100 would have done. Every dip stays in the chart.&lt;/p&gt;

&lt;p&gt;The non-obvious engineering lesson: &lt;strong&gt;stage 1 and stage 3 must not be able to touch each other.&lt;/strong&gt; Our worst bug in this system was not a modelling error. It was a grading job and a settlement job running at the same time on the same rows, so a read during a delete saw a half-finished world. Grading is a lock-ordering problem long before it is a statistics problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why publishing the losses is the whole point
&lt;/h2&gt;

&lt;p&gt;Three reasons, in increasing order of how much they surprised us.&lt;/p&gt;

&lt;p&gt;The obvious one: it is honest, and it is the only defence against the survivorship problem that makes every tipster's record look good. If you can delete a pick, your record means nothing, and nobody can tell from the outside whether you did.&lt;/p&gt;

&lt;p&gt;The second one: it makes you define things. You cannot publish a result without deciding, in public and in advance, what a push is, what a void is, which price counts, and what happens when a game is abandoned. Half the value of a public record is the rulebook it forces you to write.&lt;/p&gt;

&lt;p&gt;The third one, which we did not expect: it changes what you build. When every loss is visible, a model that wins slightly more often but explodes in a bad week looks worse on the page than it does in a backtest summary. The public chart, with the drawdowns left in, is a better product decision-making tool than any single aggregate number.&lt;/p&gt;

&lt;p&gt;Our live record, as published at the time of writing, covers 242 picks since the current selling rules were rebuilt on 5 September 2026, and the era before it graded 3,222 picks: 2,440 won, 782 lost. Both eras are on the page together, the retired one frozen.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happened when we graded the market instead of ourselves
&lt;/h2&gt;

&lt;p&gt;Once you have a grading archive, you can point it at a much more interesting question: &lt;strong&gt;is the betting market itself a good forecaster?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We took every settled two-outcome market in the archive, 18,238 of them across five sports from November 2024 to July 2026, stripped the bookmaker's margin out of each price to turn it into a probability, and checked how often those things actually happened. Both sides of every market are included, so the dataset nets to 50/50 by construction and contains no information about anyone's selections.&lt;/p&gt;

&lt;p&gt;The answer is uncomfortable if you sell predictions: the market is very well calibrated. Across every probability band, real outcome rates land within about two percentage points of the margin-free price. Something priced as a 65% chance happened about 63% of the time; a 25% chance happened about 27% of the time.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Margin-free probability band&lt;/th&gt;
&lt;th&gt;Observations&lt;/th&gt;
&lt;th&gt;Mean implied&lt;/th&gt;
&lt;th&gt;Actually happened&lt;/th&gt;
&lt;th&gt;Gap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;20–30%&lt;/td&gt;
&lt;td&gt;5,263&lt;/td&gt;
&lt;td&gt;25.2%&lt;/td&gt;
&lt;td&gt;26.7%&lt;/td&gt;
&lt;td&gt;+1.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;40–50%&lt;/td&gt;
&lt;td&gt;5,515&lt;/td&gt;
&lt;td&gt;45.7%&lt;/td&gt;
&lt;td&gt;46.4%&lt;/td&gt;
&lt;td&gt;+0.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;60–70%&lt;/td&gt;
&lt;td&gt;4,945&lt;/td&gt;
&lt;td&gt;65.2%&lt;/td&gt;
&lt;td&gt;63.0%&lt;/td&gt;
&lt;td&gt;−2.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80–90%&lt;/td&gt;
&lt;td&gt;2,157&lt;/td&gt;
&lt;td&gt;82.5%&lt;/td&gt;
&lt;td&gt;80.9%&lt;/td&gt;
&lt;td&gt;−1.6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There is a systematic residual, and it points the same way every time: outcomes priced below 50% happen slightly more often than their margin-free price implies, and favourites slightly less. That is the classic favourite–longshot pattern, documented since the 1940s, measured here on modern multi-sport fixed-odds markets with the margin removed. It is roughly twice as large in player-prop markets as in match-level markets, and those are the same markets that carry the fattest margins.&lt;/p&gt;

&lt;p&gt;So the honest framing is not "we beat the market". It is: the market is nearly perfectly calibrated, the cost of a bet is real and measurable, and the only way anyone should judge a prediction service is a record that includes the bad weeks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Grab the data
&lt;/h2&gt;

&lt;p&gt;The daily bookmaker-margin series behind that de-margining step is published as a CSV, free, updated every day:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;io&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;StringIO&lt;/span&gt;

&lt;span class="n"&gt;URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://betbetter.world/studies/margin-index?format=csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User-Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;margin-demo/1.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;

&lt;span class="c1"&gt;# the file starts with two '#' comment lines
&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;StringIO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;h2h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;market_class&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;h2h&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2way&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h2h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;as_of_date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;mean_pct&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;tail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;markets measured overall:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;markets_n&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Columns are as_of_date, market_class, shape, markets_n, books_n, mean_pct, median_pct, dropped_pct. Aggregates only, no odds, no prices, no bookmaker identities, so it can be reused freely.&lt;/p&gt;

&lt;p&gt;Links&lt;br&gt;
Our public graded record, wins and losses: &lt;a href="https://betbetter.world/results" rel="noopener noreferrer"&gt;https://betbetter.world/results&lt;/a&gt;&lt;br&gt;
Market calibration study: &lt;a href="https://betbetter.world/studies/market-calibration" rel="noopener noreferrer"&gt;https://betbetter.world/studies/market-calibration&lt;/a&gt;&lt;br&gt;
The daily margin index and its CSV: &lt;a href="https://betbetter.world/studies/margin-index" rel="noopener noreferrer"&gt;https://betbetter.world/studies/margin-index&lt;/a&gt;&lt;br&gt;
Free model API and docs: &lt;a href="https://betbetter.world/api" rel="noopener noreferrer"&gt;https://betbetter.world/api&lt;/a&gt;&lt;/p&gt;

</description>
      <category>data</category>
      <category>python</category>
      <category>statistics</category>
      <category>opendata</category>
    </item>
    <item>
      <title>I built an engine to reverse-engineer ChatGPT, Gemini and Perplexity rankings</title>
      <dc:creator>Eddie Glush</dc:creator>
      <pubDate>Thu, 04 Dec 2025 10:02:31 +0000</pubDate>
      <link>https://dev.to/eddie_glush_60e960e585bf8/i-built-an-engine-to-reverse-engineer-chatgpt-gemini-and-perplexity-rankings-5243</link>
      <guid>https://dev.to/eddie_glush_60e960e585bf8/i-built-an-engine-to-reverse-engineer-chatgpt-gemini-and-perplexity-rankings-5243</guid>
      <description>&lt;p&gt;We all know SEO is changing. I noticed that my own behavior had shifted—I wasn't Googling "best CRM for startups" anymore; I was asking ChatGPT and Perplexity.&lt;/p&gt;

&lt;p&gt;But as a developer, this annoyed me. I have tools to track my rank on Google (Ahrefs, SEMrush), but I had zero visibility into whether ChatGPT/Gemini was recommending my product or my competitor's. I was flying blind.&lt;/p&gt;

&lt;p&gt;So, I decided to build a command center to fix that.&lt;/p&gt;

&lt;p&gt;The Solution: Answer Engine Optimization (AEO) I built a system I call the AI Command Center. Instead of tracking keywords on a static page, it treats LLMs like dynamic users.&lt;/p&gt;

&lt;p&gt;It answers three questions:&lt;/p&gt;

&lt;p&gt;Visibility: Does ChatGPT even know my brand exists?&lt;/p&gt;

&lt;p&gt;Sentiment: When mentioned, is the context positive or negative?&lt;/p&gt;

&lt;p&gt;The "Mystery Shopper": If I ask an unbiased agent to compare me vs. a competitor, who wins?&lt;/p&gt;

&lt;p&gt;The Tech Stack I built this into my current .NET stack. Here is the architecture:&lt;/p&gt;

&lt;p&gt;Backend: C# / .NET (WebForms &amp;amp; Async Handlers)&lt;/p&gt;

&lt;p&gt;Database: SQL Server (storing JSON snapshots of AI conversations)&lt;/p&gt;

&lt;p&gt;AI Layer: OpenAI GPT-4o (for analysis) + DataForSEO API (for live SERP/LLM data)&lt;/p&gt;

&lt;p&gt;Frontend: Vanilla JS + Chart.js (kept it lightweight)&lt;/p&gt;

&lt;p&gt;How the "Mystery Shopper" Works (The Cool Part) This is the feature I'm most proud of. I didn't just want to know if I ranked; I wanted to know why I was winning or losing.&lt;/p&gt;

&lt;p&gt;I built a simulation engine that spins up an AI agent with a specific persona (e.g., "Savvy Buyer"). I feed it a prompt like:&lt;/p&gt;

&lt;p&gt;"Act as an unbiased consumer. Compare [My Brand] vs [Competitor] based on trust, pricing, and reviews. Who would you buy from?"&lt;/p&gt;

&lt;p&gt;The system captures the raw response, parses it, and stores the "Winner" and the "Reasoning" in the database.&lt;/p&gt;

&lt;p&gt;Now, instead of guessing why my conversion rate dropped, I can see that ChatGPT/Gemini is telling users: "Competitor X is better because they offer a free trial." That is actionable data I can fix immediately.&lt;/p&gt;

&lt;p&gt;The "Self-Healing" Code I took it one step further. If the AI says "I can't find pricing for this product," my system detects that specific failure.&lt;/p&gt;

&lt;p&gt;It then triggers a Schema Generator that writes the correct JSON-LD Product schema, validates it, and (if allowed) injects it directly into the site header. It’s essentially self-healing SEO code.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="//www.zyro.world"&gt;Zyro&lt;/a&gt;, a platform to help businesses grow, and I realized that "Growth" in 2025 means winning the conversation inside the AI, not just the blue links on Google.&lt;/p&gt;

&lt;p&gt;It was a fun challenge to wire up the "Live" APIs to get real-time data from ChatGPT, Gemini and Perplexity rather than just relying on static databases.&lt;/p&gt;

&lt;p&gt;Try it out I'd love to hear what you think of the approach. If you want to run a simulation on your own site, I put it live here: [Link to Zyro.world]&lt;/p&gt;

&lt;p&gt;Let me know if you have questions about the C# implementation or the prompt engineering!&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ai</category>
      <category>aeo</category>
      <category>seo</category>
    </item>
    <item>
      <title>Orchestrated AI: what happens when everything finally works together?</title>
      <dc:creator>Eddie Glush</dc:creator>
      <pubDate>Mon, 20 Oct 2025 18:27:49 +0000</pubDate>
      <link>https://dev.to/eddie_glush_60e960e585bf8/orchestrated-ai-what-happens-when-everything-finally-works-together-1l9f</link>
      <guid>https://dev.to/eddie_glush_60e960e585bf8/orchestrated-ai-what-happens-when-everything-finally-works-together-1l9f</guid>
      <description>&lt;p&gt;Every platform claims to help businesses grow.&lt;br&gt;
But most growth still feels like managing a hundred moving parts that don’t talk to each other.&lt;/p&gt;

&lt;p&gt;You create content in one app, run tests in another, track performance in a third, and optimize in a fourth. Every click feels productive, but the system itself stays fragmented.&lt;/p&gt;

&lt;p&gt;I learned that the hard way.&lt;/p&gt;

&lt;p&gt;Where it started&lt;/p&gt;

&lt;p&gt;Before Zyro, I built Bet Better - a fully automated sports-betting platform.&lt;br&gt;
At surface level, it predicted games and published articles. Underneath, it was a network of machine learning models, content pipelines, and dynamic SEO engines that all had to stay in sync.&lt;/p&gt;

&lt;p&gt;It taught me that growth systems don’t fail because of bad ideas — they fail because of disconnection.&lt;br&gt;
When data, logic, and delivery are aligned, everything compounds.&lt;br&gt;
When they drift, performance collapses silently.&lt;/p&gt;

&lt;p&gt;That’s when I started thinking less about tools and more about orchestration — the space between them.&lt;br&gt;
What if an AI system didn’t just generate, or track, or optimize — but understood the relationships between every moving piece?&lt;/p&gt;

&lt;p&gt;That became Zyro.&lt;/p&gt;

&lt;p&gt;The shift from automation to orchestration&lt;/p&gt;

&lt;p&gt;Automation executes tasks faster.&lt;br&gt;
Orchestration aligns entire systems.&lt;/p&gt;

&lt;p&gt;Zyro was built around that idea — not to replace existing tools, but to connect them into one intelligent growth brain.&lt;br&gt;
Every module — content, social, testing, analytics — plugs into the same orchestration layer, speaking the same language.&lt;/p&gt;

&lt;p&gt;Under the surface, Zyro’s architecture runs on a unified BusinessID model.&lt;br&gt;
That ID ties together everything a company does — content briefs, published articles, social campaigns, experiments, analytics events, feature limits, billing, even smart notifications.&lt;br&gt;
Each component can act independently, but it’s aware of the others through shared context.&lt;/p&gt;

&lt;p&gt;The result: instead of juggling disconnected dashboards, Zyro interprets and acts across them as a single system.&lt;/p&gt;

&lt;p&gt;The content layer&lt;/p&gt;

&lt;p&gt;It starts with content — because that’s still the front line of growth.&lt;/p&gt;

&lt;p&gt;Zyro’s Content Library manages the entire journey from idea to published article:&lt;/p&gt;

&lt;p&gt;Topic discovery: live keyword trends, Google Search Console data, and DataForSEO metrics feed into a ranked list of opportunities.&lt;/p&gt;

&lt;p&gt;Brief Builder: builds an AI-assisted brief using SERP analysis, competitor outlines, entity extraction, and question mining.&lt;/p&gt;

&lt;p&gt;Article Editor: generates, edits, and optimizes long-form content with tone, audience, and schema controls.&lt;/p&gt;

&lt;p&gt;Automation: every draft, version, and publish event writes back into analytics — closing the loop between creation and performance.&lt;/p&gt;

&lt;p&gt;But the real intelligence isn’t in generating text — it’s in understanding connection.&lt;br&gt;
When Zyro creates a new article, it automatically maps where that content fits into your existing SEO structure, which internal pages to link, and which entities to reinforce for topical authority.&lt;/p&gt;

&lt;p&gt;That’s orchestration — the brief, the article, the links, the SEO data, all aware of each other.&lt;/p&gt;

&lt;p&gt;The social layer&lt;/p&gt;

&lt;p&gt;The Social Suite brings the same logic to external communication.&lt;br&gt;
Every connected platform — Meta, Reddit, LinkedIn, YouTube, TikTok, Telegram — feeds analytics into a shared schema.&lt;/p&gt;

&lt;p&gt;Zyro tracks performance, schedules posts, and records engagement — but more importantly, it understands why a piece worked.&lt;br&gt;
It can trace a spike in impressions back to a post, link that post to the article it promoted, and measure the conversion ripple that followed.&lt;/p&gt;

&lt;p&gt;That’s not “posting.”&lt;br&gt;
That’s a living feedback system between your content and your audience.&lt;/p&gt;

&lt;p&gt;The experimentation layer&lt;/p&gt;

&lt;p&gt;Growth without testing is just guessing.&lt;br&gt;
Zyro’s built-in A/B testing and feature experimentation platform handles that systematically.&lt;/p&gt;

&lt;p&gt;It lets you run visual experiments, bandit optimizations, and behavioral tests across pages, audiences, and device segments.&lt;br&gt;
It uses statistical guardrails — z-tests, Bayesian models, and epsilon-greedy or UCB1 allocation — to decide winners safely and automatically.&lt;/p&gt;

&lt;p&gt;Every experiment connects back into the same ecosystem:&lt;/p&gt;

&lt;p&gt;Tests are tied to BusinessID and PageURL.&lt;/p&gt;

&lt;p&gt;Conversions are logged in Analytics.&lt;/p&gt;

&lt;p&gt;Results inform Smart Feed insights and page priorities.&lt;/p&gt;

&lt;p&gt;It’s not a separate optimization layer — it’s part of the same brain.&lt;/p&gt;

&lt;p&gt;The analytics layer&lt;/p&gt;

&lt;p&gt;All of this feeds into Zyro’s analytics engine — the nervous system.&lt;/p&gt;

&lt;p&gt;It captures pageviews, scrolls, conversions, and behavior in real time.&lt;br&gt;
Then it rolls them up into unified views — by day, device, channel, or audience — across DailySummary, DailyByChannel, and DailyByDevice tables.&lt;/p&gt;

&lt;p&gt;The same data powers the User Journeys module, visualizing the actual flow through your site: top landing paths, conversion funnels, and drop-offs.&lt;br&gt;
Everything is traceable back to the originating content, campaign, or test that caused it.&lt;/p&gt;

&lt;p&gt;And it all runs under one principle:&lt;/p&gt;

&lt;p&gt;data should describe movement, not just metrics.&lt;/p&gt;

&lt;p&gt;The Smart Feed&lt;/p&gt;

&lt;p&gt;Then there’s the intelligence layer — Zyro’s Smart Feed.&lt;br&gt;
It’s the orchestrator watching everything, surfacing what matters in real time.&lt;/p&gt;

&lt;p&gt;It doesn’t just push alerts. It interprets:&lt;/p&gt;

&lt;p&gt;A page’s CTR drops? You get a notification explaining the change and linking to the Action Plan.&lt;/p&gt;

&lt;p&gt;A new content brief is ready based on rising trends? It appears as an opportunity.&lt;/p&gt;

&lt;p&gt;Conversion lag spotted after a test? The system queues the fix.&lt;/p&gt;

&lt;p&gt;Each notification carries permissions, feature keys, and direct actions — it can open a page, launch a regeneration, or queue a job automatically.&lt;br&gt;
It’s growth guidance without the noise.&lt;/p&gt;

&lt;p&gt;Plans, permissions, and scalability&lt;/p&gt;

&lt;p&gt;Zyro’s permission and feature system keeps everything modular.&lt;br&gt;
Roles define what users can do.&lt;br&gt;
Plans define what businesses can use.&lt;/p&gt;

&lt;p&gt;It’s fail-open on features — meaning nothing breaks if a limit isn’t set — and fail-closed on permissions, ensuring safety by default.&lt;br&gt;
This allows Zyro to scale from individual creators to enterprise teams without changing architecture.&lt;/p&gt;

&lt;p&gt;The philosophy behind it&lt;/p&gt;

&lt;p&gt;Zyro isn’t about replacing people with AI.&lt;br&gt;
It’s about creating a state of flow — where the system takes care of the coordination so humans can focus on ideas, decisions, and direction.&lt;/p&gt;

&lt;p&gt;It’s built on one belief:&lt;/p&gt;

&lt;p&gt;Growth should compound, not compete.&lt;/p&gt;

&lt;p&gt;When every part of your digital ecosystem works in isolation, you’re always starting over.&lt;br&gt;
When everything works together, you start compounding results you’ve already earned.&lt;/p&gt;

&lt;p&gt;That’s what orchestration really means.&lt;/p&gt;

&lt;p&gt;It’s not hype. It’s not magic.&lt;br&gt;
It’s alignment — at scale.&lt;/p&gt;

&lt;p&gt;Where this leads&lt;/p&gt;

&lt;p&gt;The future of growth isn’t more tools — it’s fewer, smarter systems that can think together.&lt;/p&gt;

&lt;p&gt;Zyro is built to be that system.&lt;br&gt;
The orchestrated layer that connects content, testing, analytics, social, and insight into a single living network — one that keeps learning, adapting, and improving over time.&lt;/p&gt;

&lt;p&gt;When it works, it feels effortless.&lt;br&gt;
Not because it’s simple — but because everything finally moves in the same direction.&lt;/p&gt;

&lt;p&gt;Closing thought&lt;/p&gt;

&lt;p&gt;I don’t think in “features” anymore.&lt;br&gt;
I think in flows.&lt;/p&gt;

&lt;p&gt;The moment everything starts working together — content feeding experiments, experiments shaping analytics, analytics driving strategy — that’s when growth stops being a checklist.&lt;br&gt;
It becomes a living system.&lt;/p&gt;

&lt;p&gt;And that’s the world Zyro was built for.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>seo</category>
      <category>startup</category>
    </item>
    <item>
      <title>🌱 Building Zyro: From Solo Project to Unified Growth Engine</title>
      <dc:creator>Eddie Glush</dc:creator>
      <pubDate>Sun, 21 Sep 2025 19:58:34 +0000</pubDate>
      <link>https://dev.to/eddie_glush_60e960e585bf8/building-zyro-from-solo-project-to-unified-growth-engine-4cjk</link>
      <guid>https://dev.to/eddie_glush_60e960e585bf8/building-zyro-from-solo-project-to-unified-growth-engine-4cjk</guid>
      <description>&lt;p&gt;When I started working on Zyro, I wasn’t trying to build yet another SEO tool or analytics dashboard. I was frustrated. Every time I wanted to understand why a site was underperforming, I found myself bouncing between five or more disconnected platforms.&lt;/p&gt;

&lt;p&gt;SEO lived in one place. A/B testing in another. Heatmaps somewhere else. Social scheduling on a completely different stack. It felt like duct tape, not engineering.&lt;/p&gt;

&lt;p&gt;So I set out to build something different.&lt;/p&gt;

&lt;p&gt;The Goal&lt;/p&gt;

&lt;p&gt;I wanted one script that could be dropped on any site — WordPress, Shopify, Webflow, custom stacks — and instantly unlock a complete growth toolkit.&lt;/p&gt;

&lt;p&gt;Not a collection of random features, but a system where everything talks to each other:&lt;/p&gt;

&lt;p&gt;A/B testing results feeding back into SEO strategy&lt;/p&gt;

&lt;p&gt;Social campaign data shaping keyword research&lt;/p&gt;

&lt;p&gt;Content gaps directly informing automated article generation&lt;/p&gt;

&lt;p&gt;At the center of it all: conversions.&lt;/p&gt;

&lt;p&gt;The Build&lt;/p&gt;

&lt;p&gt;The core stack:&lt;/p&gt;

&lt;p&gt;Backend: C# ASP.NET WebForms with SQL Server&lt;/p&gt;

&lt;p&gt;Frontend: A JavaScript tracker that captures pageviews, clicks, scroll depth, conversions, experiments, and schema injection&lt;/p&gt;

&lt;p&gt;Integrations: DataForSEO, Google Trends, Google Search Console, OpenAI, Google NLP, PageSpeed Insights&lt;/p&gt;

&lt;p&gt;From there, I built out the major modules:&lt;/p&gt;

&lt;p&gt;Content Hub for AI driven briefs and article generation&lt;/p&gt;

&lt;p&gt;A/B Testing Suite with anti flicker, bandit modes, and Bayesian statistics&lt;/p&gt;

&lt;p&gt;Insights Overlay with heatmaps, scroll maps, rage click detection, and mobile gesture analysis&lt;/p&gt;

&lt;p&gt;Social Hub for trend mining and campaign publishing&lt;/p&gt;

&lt;p&gt;Smart Feed that turns billions of signals into actionable alerts&lt;/p&gt;

&lt;p&gt;Lessons Learned&lt;/p&gt;

&lt;p&gt;Integration is harder than invention. Building each feature was straightforward. Making them work together took months of iteration.&lt;/p&gt;

&lt;p&gt;Developers and marketers want different dashboards. I learned to design one system but two lenses.&lt;/p&gt;

&lt;p&gt;AI is only as good as the context. OpenAI could generate copy, but without entity analysis and competitor insights, the output lacked edge.&lt;/p&gt;

&lt;p&gt;Why Share This Here&lt;/p&gt;

&lt;p&gt;Forem is about builders. Many of you are also creating tools, wrestling with architecture choices, and trying to make something that matters. I don’t see Zyro as just a SaaS. It’s a reflection of a question that has been driving me for years:&lt;/p&gt;

&lt;p&gt;What if we stopped stitching tools together and instead built one growth engine that actually understands the whole journey?&lt;/p&gt;

&lt;p&gt;What’s Next&lt;/p&gt;

&lt;p&gt;I’ll be opening Zyro to early users soon. The early numbers are encouraging:&lt;/p&gt;

&lt;p&gt;Automated articles ranking within weeks&lt;/p&gt;

&lt;p&gt;Conversion insights surfacing in hours instead of months&lt;/p&gt;

&lt;p&gt;Faster SEO execution across entire sites&lt;/p&gt;

&lt;p&gt;But the bigger goal is this: make growth engineering accessible for everyone, from solo founders to enterprises.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>startup</category>
      <category>seo</category>
    </item>
    <item>
      <title>🚀 How I Built Zyro: An All in One Growth Engine for SEO, CRO, and Social Media</title>
      <dc:creator>Eddie Glush</dc:creator>
      <pubDate>Sun, 21 Sep 2025 19:56:33 +0000</pubDate>
      <link>https://dev.to/eddie_glush_60e960e585bf8/how-i-built-zyro-an-all-in-one-growth-engine-for-seo-cro-and-social-media-5a2o</link>
      <guid>https://dev.to/eddie_glush_60e960e585bf8/how-i-built-zyro-an-all-in-one-growth-engine-for-seo-cro-and-social-media-5a2o</guid>
      <description>&lt;p&gt;For the last two years I have been obsessed with a simple question:&lt;/p&gt;

&lt;p&gt;Why are growth tools so fragmented?&lt;/p&gt;

&lt;p&gt;Marketers and developers are forced to juggle multiple disconnected platforms. One for SEO audits, one for A/B testing, one for heatmaps, another for social scheduling, and a pile of scripts just to track conversions.&lt;/p&gt;

&lt;p&gt;I wanted something different. Something unified. Something that actually puts conversions at the core, not as an afterthought.&lt;/p&gt;

&lt;p&gt;So I built Zyro. It is an AI powered growth engine that combines technical SEO, content generation, A/B testing, analytics, and social automation into a single script and dashboard.&lt;/p&gt;

&lt;p&gt;⚡ The Vision&lt;/p&gt;

&lt;p&gt;One script. Paste it on any site whether WordPress, Shopify, Wix, Squarespace, Webflow, or custom stack and you instantly unlock a full growth stack.&lt;/p&gt;

&lt;p&gt;All signals in one place. Heatmaps, scroll depth, clicks, funnels, social performance, SEO metrics, and structured data health, all correlated together.&lt;/p&gt;

&lt;p&gt;AI at the core. From article generation to entity gap analysis to predictive testing, every module leverages machine learning.&lt;/p&gt;

&lt;p&gt;Conversions first. Every feature, from heatmaps to keyword scoring, is designed to answer the only question that matters: Does this improve conversions?&lt;/p&gt;

&lt;p&gt;🛠️ Architecture at a Glance&lt;/p&gt;

&lt;p&gt;Backend: ASP.NET WebForms with SQL Server&lt;/p&gt;

&lt;p&gt;Frontend: JavaScript tracker that captures pageviews, clicks, scroll depth, heartbeats, conversions, schema injection, and experiment assignment&lt;/p&gt;

&lt;p&gt;Data: DataForSEO, Google Trends, GSC, OpenAI, Google NLP, PageSpeed Insights&lt;/p&gt;

&lt;p&gt;Core Modules:&lt;/p&gt;

&lt;p&gt;AI Content Hub: Brief Builder to Article Generator to Optimizer to Publish&lt;/p&gt;

&lt;p&gt;A/B Testing Suite: Anti flicker, bandit modes such as Thompson, epsilon greedy, and UCB1, with Bayesian and frequentist analysis&lt;/p&gt;

&lt;p&gt;Insights Overlay: Click heatmaps, scroll depth maps, rage and dead click detection, gesture maps for mobile&lt;/p&gt;

&lt;p&gt;Optimization Hub: Portfolio style dashboard that treats web pages like financial assets&lt;/p&gt;

&lt;p&gt;Social Hub: Universal composer, trend mining, auto captions, analytics ingestion from Instagram, Reddit, TikTok, YouTube, and LinkedIn&lt;/p&gt;

&lt;p&gt;Smart Feed: An alert system that surfaces what actually matters, such as “Conversions dropped 20 percent yesterday on checkout”&lt;/p&gt;

&lt;p&gt;🧩 Example: The Smart Feed&lt;/p&gt;

&lt;p&gt;Instead of drowning you in dashboards, Zyro condenses billions of raw signals into actionable alerts:&lt;/p&gt;

&lt;p&gt;🔥 “Your checkout page scroll depth dropped below 35 percent on mobile”&lt;/p&gt;

&lt;p&gt;📈 “Keyword opportunity detected: NBA prop bets trending 200 percent with low competition”&lt;/p&gt;

&lt;p&gt;🎯 “Experiment B has reached significance with an 11.4 percent conversion lift”&lt;/p&gt;

&lt;p&gt;This is not just analytics. It is a growth assistant.&lt;/p&gt;

&lt;p&gt;🤯 What Makes It Different&lt;/p&gt;

&lt;p&gt;Competitors are siloed. Ahrefs for SEO. VWO for testing. Hootsuite for social.&lt;/p&gt;

&lt;p&gt;Zyro is unified, interconnected, and driven by AI.&lt;/p&gt;

&lt;p&gt;Every module talks to the others. A/B tests inform SEO insights. Content gaps inform article generation. Social campaigns loop back into keyword research.&lt;/p&gt;

&lt;p&gt;This combinatory power is the difference between tinkering and compounding.&lt;/p&gt;

&lt;p&gt;🔮 What’s Next&lt;/p&gt;

&lt;p&gt;I am opening Zyro up soon. Early results are already strong:&lt;/p&gt;

&lt;p&gt;Five times faster SEO execution&lt;/p&gt;

&lt;p&gt;Daily automated content pipelines ranking within weeks&lt;/p&gt;

&lt;p&gt;Conversion insights that surface in hours, not months&lt;/p&gt;

&lt;p&gt;The goal is clear. Make growth engineering accessible to every website on the planet, from solo founders to global enterprises.&lt;/p&gt;

&lt;p&gt;🙌 Let’s Talk&lt;/p&gt;

&lt;p&gt;If you are a developer, growth hacker, or founder who is curious about the stack behind Zyro, I would love to swap ideas.&lt;/p&gt;

&lt;p&gt;👉 Drop a comment below&lt;br&gt;
👉 Or check out zyro.world&lt;br&gt;
 which is launching soon&lt;/p&gt;

&lt;p&gt;Closing thought&lt;/p&gt;

&lt;p&gt;The future of growth is not juggling more tools.&lt;br&gt;
It is one intelligent engine that makes sense of the chaos.&lt;/p&gt;

&lt;p&gt;That is what I am building with Zyro.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>webdev</category>
      <category>growthhacking</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
