<?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: Max Widgets</title>
    <description>The latest articles on DEV Community by Max Widgets (@max_widgets_f21f98b1708be).</description>
    <link>https://dev.to/max_widgets_f21f98b1708be</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%2F3718112%2F280e39e3-40db-4383-9d4f-b6b15939fcb1.png</url>
      <title>DEV Community: Max Widgets</title>
      <link>https://dev.to/max_widgets_f21f98b1708be</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/max_widgets_f21f98b1708be"/>
    <language>en</language>
    <item>
      <title>Best Roblox Executors 2026: Free, Paid, Mobile &amp; Keyless Options</title>
      <dc:creator>Max Widgets</dc:creator>
      <pubDate>Tue, 01 Sep 2026 17:05:24 +0000</pubDate>
      <link>https://dev.to/max_widgets_f21f98b1708be/best-roblox-executors-2026-free-paid-mobile-keyless-options-55oa</link>
      <guid>https://dev.to/max_widgets_f21f98b1708be/best-roblox-executors-2026-free-paid-mobile-keyless-options-55oa</guid>
      <description>&lt;p&gt;Roblox scripts can add custom features, automation, and other gameplay changes, but running external scripts generally requires a Roblox executor. These third-party tools are designed to load and execute Lua-based scripts outside the normal Roblox Studio environment.&lt;/p&gt;

&lt;p&gt;With so many executors available in 2026, choosing the right one can be confusing. Some are designed specifically for Windows, while others focus on Android or mobile devices. Some are free, while others use keys, subscriptions, or paid access.&lt;/p&gt;

&lt;p&gt;In this guide, we have covered 9 popular Roblox executors in 2026, along with their platform support, key requirements, notable features, and important safety considerations.&lt;/p&gt;

&lt;p&gt;Important: Third-party executors and scripts can violate Roblox's Terms of Use and may result in account restrictions or bans. Downloading executors from unofficial mirrors can also expose your device to malware.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Solara
&lt;/h2&gt;

&lt;p&gt;Platform: Windows&lt;br&gt;
Access: Free&lt;br&gt;
Best for: PC beginners&lt;/p&gt;

&lt;p&gt;Solara is one of the better-known names among Windows Roblox executors. Its lightweight design makes it attractive to users who want a relatively simple environment for loading Roblox scripts.&lt;/p&gt;

&lt;p&gt;One of its biggest advantages is its straightforward interface. Users don't have to deal with an overly complicated dashboard before loading a script.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Windows support&lt;/li&gt;
&lt;li&gt;Lightweight interface&lt;/li&gt;
&lt;li&gt;Script execution&lt;/li&gt;
&lt;li&gt;Simple user experience&lt;/li&gt;
&lt;li&gt;Popular among PC script users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solara is worth considering if you're looking for a straightforward Windows option rather than a feature-heavy executor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eccisland.is/download/solara" rel="noopener noreferrer"&gt;Get Solara&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Wave
&lt;/h2&gt;

&lt;p&gt;Platform: Windows&lt;br&gt;
Access: Availability can vary&lt;br&gt;
Best for: Experienced PC users&lt;/p&gt;

&lt;p&gt;Wave has gained attention in the Roblox scripting community because of its focus on execution performance and regular development.&lt;/p&gt;

&lt;p&gt;It is generally aimed at users who already understand how Roblox scripts and executors work and want a more advanced environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Windows support&lt;/li&gt;
&lt;li&gt;Script execution&lt;/li&gt;
&lt;li&gt;Regular development&lt;/li&gt;
&lt;li&gt;Advanced user features&lt;/li&gt;
&lt;li&gt;Designed for demanding scripts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wave can be an option for experienced users, although its availability, pricing, and compatibility should always be checked before downloading.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eccisland.is/download/wave" rel="noopener noreferrer"&gt;Get Wave&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Xeno
&lt;/h2&gt;

&lt;p&gt;Platform: Windows&lt;br&gt;
Access: Free&lt;br&gt;
Best for: Lightweight scripting&lt;/p&gt;

&lt;p&gt;Xeno is another Windows-based executor that has attracted attention because of its lightweight approach. It is particularly interesting for users who prefer open-source projects and want greater visibility into how a tool is developed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Free access&lt;/li&gt;
&lt;li&gt;Windows support&lt;/li&gt;
&lt;li&gt;Lightweight design&lt;/li&gt;
&lt;li&gt;Script execution&lt;/li&gt;
&lt;li&gt;Open-source development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If transparency and a relatively simple interface are important to you, Xeno is one of the options worth researching.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eccisland.is/download/xeno" rel="noopener noreferrer"&gt;Get Xeno&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. KRNL
&lt;/h2&gt;

&lt;p&gt;Platform: Windows&lt;br&gt;
Status: Legacy&lt;/p&gt;

&lt;p&gt;KRNL was once one of the most recognized names in Roblox scripting. It became popular because of its compatibility with a large number of scripts and its extensive community.&lt;/p&gt;

&lt;p&gt;However, users should be careful when searching for KRNL today. Many websites advertise old executors using the KRNL name, and unofficial downloads can be risky.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Windows support&lt;/li&gt;
&lt;li&gt;Large script compatibility&lt;/li&gt;
&lt;li&gt;Simple interface&lt;/li&gt;
&lt;li&gt;Large community&lt;/li&gt;
&lt;li&gt;Extensive documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because its current status differs from its historical reputation, don't assume that every website offering "latest KRNL" is legitimate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wearedevs.net/d/Krnl" rel="noopener noreferrer"&gt;Get KRNL&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Swift
&lt;/h2&gt;

&lt;p&gt;Platform: Windows / Mobile availability varies&lt;br&gt;
Access: Depends on build&lt;/p&gt;

&lt;p&gt;Swift is another executor frequently discussed by Roblox scripting users. Its main appeal is its focus on providing a relatively simple way to load scripts.&lt;/p&gt;

&lt;p&gt;Depending on the current version, platform availability can change, so users should verify the supported device before installing anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simple interface&lt;/li&gt;
&lt;li&gt;Script execution&lt;/li&gt;
&lt;li&gt;PC-focused builds&lt;/li&gt;
&lt;li&gt;Mobile availability may vary&lt;/li&gt;
&lt;li&gt;Easy script-loading workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://eccisland.is/download/swift" rel="noopener noreferrer"&gt;Get Swift&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Delta
&lt;/h2&gt;

&lt;p&gt;Platform: Android and other supported platforms depending on version&lt;br&gt;
Access: Key requirements may vary&lt;br&gt;
Best for: Mobile users&lt;/p&gt;

&lt;p&gt;Delta is particularly popular among Roblox users who want to run scripts on mobile devices.&lt;/p&gt;

&lt;p&gt;Its mobile-focused design makes it different from Windows-only executors. Depending on the current release, users may encounter a key system before accessing the executor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mobile-focused experience&lt;/li&gt;
&lt;li&gt;Android support&lt;/li&gt;
&lt;li&gt;Script execution&lt;/li&gt;
&lt;li&gt;Built-in interface&lt;/li&gt;
&lt;li&gt;Regularly updated versions may be available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're primarily playing Roblox on a phone or tablet, Delta is one of the names commonly considered by mobile script users.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eccisland.is/download/delta" rel="noopener noreferrer"&gt;Get Delta&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Hydrogen
&lt;/h2&gt;

&lt;p&gt;Platform: Mobile / Mac / Windows availability varies&lt;br&gt;
Access: May require a key&lt;/p&gt;

&lt;p&gt;Hydrogen is another cross-platform name in the Roblox executor community. Its appeal comes from supporting users who don't necessarily play Roblox exclusively on Windows.&lt;/p&gt;

&lt;p&gt;The availability of specific builds can change after Roblox updates, so always verify compatibility before installing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Cross-platform focus&lt;/li&gt;
&lt;li&gt;Script execution&lt;/li&gt;
&lt;li&gt;Mobile support&lt;/li&gt;
&lt;li&gt;User interface for loading scripts&lt;/li&gt;
&lt;li&gt;Different builds for supported platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://eccisland.is/download/hydrogen" rel="noopener noreferrer"&gt;Get Hydrogen&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Fluxus
&lt;/h2&gt;

&lt;p&gt;Platform: Windows / Android&lt;br&gt;
Access: Key requirements may vary&lt;/p&gt;

&lt;p&gt;Fluxus has been around the Roblox scripting scene for years and has attracted users on both PC and Android.&lt;/p&gt;

&lt;p&gt;Its main purpose is to provide an environment where users can load external Lua scripts and access their available features.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Windows support&lt;/li&gt;
&lt;li&gt;Android support&lt;/li&gt;
&lt;li&gt;Script execution&lt;/li&gt;
&lt;li&gt;User-friendly interface&lt;/li&gt;
&lt;li&gt;Community-supported development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As with other executors, compatibility can change quickly after Roblox updates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eccisland.is/download/fluxus" rel="noopener noreferrer"&gt;Get Fluxus&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Arceus X
&lt;/h2&gt;

&lt;p&gt;Platform: Android / iOS availability varies&lt;br&gt;
Access: Free and paid versions may exist&lt;/p&gt;

&lt;p&gt;Arceus X is primarily associated with mobile Roblox scripting. Instead of relying entirely on a traditional desktop-style interface, mobile versions can provide an in-game menu for accessing available features.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mobile-focused design&lt;/li&gt;
&lt;li&gt;Android support&lt;/li&gt;
&lt;li&gt;iOS availability may vary&lt;/li&gt;
&lt;li&gt;Built-in feature menus&lt;/li&gt;
&lt;li&gt;Script and modification support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Users should be particularly careful with mobile downloads because fake APKs and modified installers are common across unofficial websites.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://arceusx.net/" rel="noopener noreferrer"&gt;Get Arceus X&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Choose the Best Roblox Executor
&lt;/h2&gt;

&lt;p&gt;There isn't one executor that is perfect for everyone. The right choice depends on your device, experience, and the type of scripts you want to run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows Users&lt;/strong&gt;&lt;br&gt;
If you're using a PC, you can consider Solara, Wave, Xeno, Swift, or Fluxus, depending on current compatibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Android Users&lt;/strong&gt;&lt;br&gt;
Mobile players commonly look toward options such as Delta, Hydrogen, Fluxus, and Arceus X.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beginners&lt;/strong&gt;&lt;br&gt;
A simple interface is usually more important than having hundreds of advanced settings. Beginners should prioritize tools that have clear documentation and an active development history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advanced Users&lt;/strong&gt;&lt;br&gt;
Experienced users may prefer executors with broader script compatibility, better debugging options, and more frequent updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Should You Check Before Downloading?
&lt;/h2&gt;

&lt;p&gt;Before installing any Roblox executor, don't simply download the first file appearing in Google search results.&lt;/p&gt;

&lt;p&gt;Check these things first:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Platform compatibility: Make sure the executor actually supports your operating system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recent updates: Roblox updates can break third-party tools, so an old build may no longer function.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Source reputation: Avoid random download pages, shortened URLs, and suspicious mirrors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;File security: Scan downloaded files with a reputable security tool before opening them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Community activity: An active development community can make it easier to identify fake or outdated versions.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Are Roblox Executors Safe?
&lt;/h2&gt;

&lt;p&gt;There is no universal guarantee that a Roblox executor is safe. The biggest risk often comes from fake executors, unofficial mirrors, modified APKs, and malicious downloads.&lt;/p&gt;

&lt;p&gt;A file being advertised as "keyless," "undetected," or "100% safe" does not prove that it is actually safe.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep these precautions in mind:&lt;/li&gt;
&lt;li&gt;Download only from a source you trust.&lt;/li&gt;
&lt;li&gt;Scan executable files before running them.&lt;/li&gt;
&lt;li&gt;Don't enter your Roblox password into an executor.&lt;/li&gt;
&lt;li&gt;Never give an unknown tool access to unrelated accounts or sensitive data.&lt;/li&gt;
&lt;li&gt;Be cautious with executors that ask you to disable security software.&lt;/li&gt;
&lt;li&gt;Consider using an alternate Roblox account because script usage can result in account penalties.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Can Roblox Executors Get You Banned?
&lt;/h2&gt;

&lt;p&gt;Yes. Using third-party executors or exploiting Roblox games can put your account at risk.&lt;/p&gt;

&lt;p&gt;Even if an executor claims to be "undetected" or has an "anti-ban" feature, there is no reliable guarantee that your account will remain safe. Roblox can change its detection systems, and an executor that works today may stop working after a future update.&lt;/p&gt;

&lt;p&gt;For that reason, users should understand the risks before using external scripts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free vs Paid Roblox Executors
&lt;/h2&gt;

&lt;p&gt;Both free and paid executors have advantages and disadvantages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Free Executors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No upfront cost&lt;/li&gt;
&lt;li&gt;Easy to test&lt;/li&gt;
&lt;li&gt;Large number of options&lt;/li&gt;
&lt;li&gt;Suitable for casual users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;May have advertisements or key systems&lt;/li&gt;
&lt;li&gt;Updates can be inconsistent&lt;/li&gt;
&lt;li&gt;Some downloads may be fake&lt;/li&gt;
&lt;li&gt;Compatibility can change frequently&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Paid Executors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;May offer additional features&lt;/li&gt;
&lt;li&gt;Can provide dedicated support&lt;/li&gt;
&lt;li&gt;Some projects prioritize faster updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Costs money&lt;/li&gt;
&lt;li&gt;Paid does not automatically mean safe&lt;/li&gt;
&lt;li&gt;Some products may disappear or stop development&lt;/li&gt;
&lt;li&gt;Users still face Roblox account risks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most expensive executor isn't necessarily the best one. Compatibility, reputation, update frequency, and download safety matter more than price alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is a Roblox executor?&lt;/strong&gt;&lt;br&gt;
A Roblox executor is a third-party program designed to load and execute external Lua scripts while Roblox is running. These scripts can modify or automate certain aspects of gameplay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which is the best Roblox executor in 2026?&lt;/strong&gt;&lt;br&gt;
There isn't one universal best executor. Solara and Xeno are options commonly considered by Windows users, while Delta and Arceus X are associated with mobile Roblox scripting. The best choice depends on your device and current compatibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are Roblox executors free?&lt;/strong&gt;&lt;br&gt;
Many executors offer free versions, while others may use keys, paid access, or premium tiers. Requirements can change between releases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which Roblox executor is best for mobile?&lt;/strong&gt;&lt;br&gt;
Delta, Hydrogen, Fluxus, and Arceus X are among the names commonly associated with mobile Roblox scripting. Always verify the current supported platform before downloading.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do Roblox executors work after every Roblox update?&lt;/strong&gt;&lt;br&gt;
Not necessarily. Roblox updates can break third-party executors, meaning developers may need to release a new version. This is why an executor that worked previously may suddenly stop functioning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can an executor get my Roblox account banned?&lt;/strong&gt;&lt;br&gt;
Yes. Using third-party exploits can violate Roblox's rules and may result in warnings, suspensions, or bans.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are keyless Roblox executors safer?&lt;/strong&gt;&lt;br&gt;
No. Keyless does not mean safe. A key system is mainly an access mechanism and doesn't determine whether a downloaded executable is trustworthy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does my Roblox executor stop working?&lt;/strong&gt;&lt;br&gt;
The most common reason is a Roblox update that changed something required by the executor. Other possibilities include an outdated build, incompatible Roblox version, or a script that is no longer supported.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should I use an executor on my main Roblox account?&lt;/strong&gt;&lt;br&gt;
It's risky. Since third-party scripting can result in account penalties, users should understand that their main account could be affected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Verdict
&lt;/h2&gt;

&lt;p&gt;Roblox executors continue to attract players who want to experiment with scripts, automation, and additional gameplay features. Solara, Wave, Xeno, Swift, Delta, Hydrogen, Fluxus, Arceus X, and the legacy KRNL are among the names users may encounter in 2026.&lt;/p&gt;

&lt;p&gt;However, choosing an executor isn't only about execution performance or whether it is free. Current compatibility, development activity, platform support, download authenticity, and account safety should all be considered.&lt;/p&gt;

&lt;p&gt;Most importantly, remember that third-party executors carry genuine security and Roblox account risks. Avoid suspicious downloads, don't trust "undetected" guarantees, and verify the source before installing anything.&lt;/p&gt;

</description>
      <category>learning</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Designing a Scalable Category &amp; Search Architecture for a Large Laravel Content Platform</title>
      <dc:creator>Max Widgets</dc:creator>
      <pubDate>Fri, 24 Jul 2026 02:55:57 +0000</pubDate>
      <link>https://dev.to/max_widgets_f21f98b1708be/designing-a-scalable-category-search-architecture-for-a-large-laravel-content-platform-1mig</link>
      <guid>https://dev.to/max_widgets_f21f98b1708be/designing-a-scalable-category-search-architecture-for-a-large-laravel-content-platform-1mig</guid>
      <description>&lt;p&gt;&lt;em&gt;Lessons learned while organizing thousands of records into a fast, searchable platform with clean URLs, efficient indexing, and a maintainable architecture.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When I started building a large content platform, I quickly realized that the biggest challenge wasn't writing code—it was organizing information.&lt;/p&gt;

&lt;p&gt;At first, everything lived in a single list. As the database grew, navigation became slower, search results became inconsistent, and adding new content required increasingly complex logic.&lt;/p&gt;

&lt;p&gt;Instead of continuing to patch problems, I redesigned the platform around categories, clean URLs, database relationships, and efficient indexing.&lt;/p&gt;

&lt;p&gt;This article shares the architecture that worked well, the mistakes I made, and the engineering decisions that improved scalability.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Many content websites grow organically.&lt;/p&gt;

&lt;p&gt;A few pages become hundreds.&lt;/p&gt;

&lt;p&gt;Hundreds become thousands.&lt;/p&gt;

&lt;p&gt;Without planning, you'll eventually encounter problems like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Duplicate content&lt;/li&gt;
&lt;li&gt;Slow search queries&lt;/li&gt;
&lt;li&gt;Difficult navigation&lt;/li&gt;
&lt;li&gt;Poor URL structure&lt;/li&gt;
&lt;li&gt;Large database joins&lt;/li&gt;
&lt;li&gt;Weak internal discoverability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These problems aren't unique to gaming websites—they apply to documentation portals, knowledge bases, blogs, marketplaces, and developer resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Information Architecture Before Writing Code
&lt;/h2&gt;

&lt;p&gt;One lesson I learned early:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A bad database can often be fixed.&lt;br&gt;
A bad information architecture becomes expensive.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of thinking in pages, I started thinking in relationships.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Game
│
├── Category
│      │
│      ├── Scripts
│      ├── Features
│      └── Metadata
│
└── Related Games
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything became easier after defining the hierarchy first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database Design
&lt;/h2&gt;

&lt;p&gt;A simplified schema looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;games&lt;/span&gt;
&lt;span class="c1"&gt;-----&lt;/span&gt;
&lt;span class="n"&gt;id&lt;/span&gt;
&lt;span class="n"&gt;name&lt;/span&gt;
&lt;span class="n"&gt;slug&lt;/span&gt;

&lt;span class="n"&gt;categories&lt;/span&gt;
&lt;span class="c1"&gt;----------&lt;/span&gt;
&lt;span class="n"&gt;id&lt;/span&gt;
&lt;span class="n"&gt;game_id&lt;/span&gt;
&lt;span class="n"&gt;title&lt;/span&gt;
&lt;span class="n"&gt;slug&lt;/span&gt;

&lt;span class="n"&gt;scripts&lt;/span&gt;
&lt;span class="c1"&gt;-------&lt;/span&gt;
&lt;span class="n"&gt;id&lt;/span&gt;
&lt;span class="n"&gt;category_id&lt;/span&gt;
&lt;span class="n"&gt;title&lt;/span&gt;
&lt;span class="n"&gt;slug&lt;/span&gt;
&lt;span class="n"&gt;description&lt;/span&gt;
&lt;span class="n"&gt;created_at&lt;/span&gt;

&lt;span class="n"&gt;features&lt;/span&gt;
&lt;span class="c1"&gt;--------&lt;/span&gt;
&lt;span class="n"&gt;id&lt;/span&gt;
&lt;span class="n"&gt;script_id&lt;/span&gt;
&lt;span class="n"&gt;feature&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of storing repeated information, relationships handled everything naturally.&lt;/p&gt;

&lt;p&gt;Benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smaller tables&lt;/li&gt;
&lt;li&gt;Easier updates&lt;/li&gt;
&lt;li&gt;Better maintainability&lt;/li&gt;
&lt;li&gt;Cleaner queries&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  URL Design
&lt;/h2&gt;

&lt;p&gt;Readable URLs matter for both users and maintainers.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/page?id=421&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I preferred structures like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/categories/scripts/example-game&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/items/example-script/1253&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easier debugging&lt;/li&gt;
&lt;li&gt;Better navigation&lt;/li&gt;
&lt;li&gt;Predictable routing&lt;/li&gt;
&lt;li&gt;Cleaner analytics&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Laravel Routing Example
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/categories/{slug}'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;CategoryController&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'show'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/items/{slug}/{id}'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;ScriptController&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'show'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Simple routes reduce maintenance and improve readability.&lt;/p&gt;
&lt;h2&gt;
  
  
  Search Architecture
&lt;/h2&gt;

&lt;p&gt;One mistake I made early was treating search like a simple SQL query.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;scripts&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'%fruit%'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This quickly became inefficient.&lt;/p&gt;

&lt;p&gt;Instead, I combined:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;indexed columns&lt;/li&gt;
&lt;li&gt;normalized slugs&lt;/li&gt;
&lt;li&gt;searchable metadata&lt;/li&gt;
&lt;li&gt;category filtering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;to reduce unnecessary scanning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Internal Linking as Information Discovery
&lt;/h2&gt;

&lt;p&gt;Many developers think internal links only matter for SEO.&lt;/p&gt;

&lt;p&gt;I started looking at them differently.&lt;/p&gt;

&lt;p&gt;Every internal link became another navigation path.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Homepage
   │
   ├── Categories
   │      │
   │      ├── Scripts
   │      │      │
   │      │      └── Related Scripts
   │      │
   │      └── Featured Items
   │
   └── Search
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Users discovered more content naturally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caching
&lt;/h2&gt;

&lt;p&gt;Without caching, every page required multiple database queries.&lt;/p&gt;

&lt;p&gt;Laravel made optimization straightforward.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$categories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Cache&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;remember&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s1"&gt;'categories'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;addHours&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;Category&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simple caching reduced repeated database work and improved response times.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pagination
&lt;/h2&gt;

&lt;p&gt;Large datasets should never be loaded at once.&lt;/p&gt;

&lt;p&gt;Instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Script&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;paginate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pagination improved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;memory usage&lt;/li&gt;
&lt;li&gt;response speed&lt;/li&gt;
&lt;li&gt;database efficiency&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Indexing Strategy
&lt;/h2&gt;

&lt;p&gt;Indexes matter more than many developers realize.&lt;/p&gt;

&lt;p&gt;Frequently filtered columns should be indexed.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;slug&lt;/li&gt;
&lt;li&gt;game_id&lt;/li&gt;
&lt;li&gt;category_id&lt;/li&gt;
&lt;li&gt;created_at&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Proper indexing significantly reduced query time as the database grew.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons Learned
&lt;/h2&gt;

&lt;p&gt;Building software is rarely about writing more code.&lt;/p&gt;

&lt;p&gt;It's often about reducing complexity.&lt;/p&gt;

&lt;p&gt;The biggest improvements came from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;simplifying relationships&lt;/li&gt;
&lt;li&gt;reducing duplicate data&lt;/li&gt;
&lt;li&gt;improving navigation&lt;/li&gt;
&lt;li&gt;organizing content before scaling&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Whether you're building a documentation portal, marketplace, blog, or searchable content platform, architecture decisions made early will determine how easily the project scales later.&lt;/p&gt;

&lt;p&gt;I applied these ideas while building my own Laravel-based project, BloxScriptsDB, where the focus was creating a structured, searchable content experience rather than maintaining one enormous list of pages.&lt;/p&gt;

&lt;p&gt;The project became a practical reminder that good architecture isn't about using more technology—it's about making information easier to organize, maintain, and discover.&lt;/p&gt;

&lt;p&gt;Output Online: &lt;a href="https://bloxscriptsdb.net" rel="noopener noreferrer"&gt;https://bloxscriptsdb.net&lt;/a&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Build a Grow a Garden 2 Crop Value Calculator Using Python</title>
      <dc:creator>Max Widgets</dc:creator>
      <pubDate>Thu, 18 Jun 2026 04:41:51 +0000</pubDate>
      <link>https://dev.to/max_widgets_f21f98b1708be/how-to-build-a-grow-a-garden-2-crop-value-calculator-using-python-549n</link>
      <guid>https://dev.to/max_widgets_f21f98b1708be/how-to-build-a-grow-a-garden-2-crop-value-calculator-using-python-549n</guid>
      <description>&lt;p&gt;Grow a Garden 2 contains dozens of crops, mutations, growth bonuses, and value multipliers. Manually calculating the value of a harvested crop can be difficult, especially when mutations and friend boosts are involved.&lt;/p&gt;

&lt;p&gt;In this tutorial, we'll build a simple Python calculator that estimates crop values automatically.&lt;/p&gt;

&lt;p&gt;Step 1: Create Crop Data&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="n"&gt;plants&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;Carrot&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;base_value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rarity&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;Common&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;Strawberry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;base_value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rarity&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;Common&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;Mushroom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;base_value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rarity&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;Legendary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 2: Create Mutation Multipliers&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="n"&gt;mutations&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;None&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Golden&lt;/span&gt;&lt;span class="sh"&gt;"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bloodlit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Rainbow&lt;/span&gt;&lt;span class="sh"&gt;"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 3: Calculate Crop Value&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;calculate_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mutation_multiplier&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;base_value&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;mutation_multiplier&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculate_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;base_value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;4.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mutation_multiplier&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&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;Estimated Value:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 4: Add Friend Boost&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;apply_friend_boost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;boost_percent&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;boost_percent&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;final_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;apply_friend_boost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;70&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;Final Value:&lt;/span&gt;&lt;span class="sh"&gt;"&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="n"&gt;final_value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 5: Complete Calculator&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="n"&gt;plant&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mushroom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;4.5&lt;/span&gt; &lt;span class="n"&gt;mutation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bloodlit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="n"&gt;friend_boost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plants&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;plant&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;base_value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;multiplier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mutations&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mutation&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculate_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;multiplier&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;final_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;apply_friend_boost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;friend_boost&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;Crop:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;plant&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;Value:&lt;/span&gt;&lt;span class="sh"&gt;"&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="n"&gt;final_value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why Use a Calculator?&lt;/p&gt;

&lt;p&gt;As new crops, pets, gears, and mutations are added to Grow a Garden 2, value calculations become more complicated.&lt;/p&gt;

&lt;p&gt;Many players use dedicated tools instead of calculating everything manually.&lt;/p&gt;

&lt;p&gt;If you'd like a ready-made version, you can try:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://gag2calc.com" rel="noopener noreferrer"&gt;https://gag2calc.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It includes crop values, mutations, growth calculations, pets, gears, codes, and other Grow a Garden 2 tools.&lt;/p&gt;

</description>
      <category>python</category>
      <category>calculator</category>
    </item>
    <item>
      <title>How to Fetch TikTok Data and Estimate Earnings Using Python</title>
      <dc:creator>Max Widgets</dc:creator>
      <pubDate>Sat, 04 Apr 2026 11:35:32 +0000</pubDate>
      <link>https://dev.to/max_widgets_f21f98b1708be/how-to-fetch-tiktok-data-and-estimate-earnings-using-python-3pl8</link>
      <guid>https://dev.to/max_widgets_f21f98b1708be/how-to-fetch-tiktok-data-and-estimate-earnings-using-python-3pl8</guid>
      <description>&lt;p&gt;TikTok doesn’t provide a fully open and flexible API for developers, which makes it difficult to analyze creator data or build tools around it.&lt;/p&gt;

&lt;p&gt;In this post, we’ll:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetch TikTok data using an unofficial API&lt;/li&gt;
&lt;li&gt;Extract useful metrics&lt;/li&gt;
&lt;li&gt;Calculate engagement rate&lt;/li&gt;
&lt;li&gt;Estimate earnings using a simple model&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Install Dependencies
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;TikTokApi
python &lt;span class="nt"&gt;-m&lt;/span&gt; playwright &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Setup TikTok API Instance
&lt;/h2&gt;

&lt;p&gt;You need a verifyFp value.&lt;/p&gt;

&lt;p&gt;Get it from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open TikTok in browser&lt;/li&gt;
&lt;li&gt;DevTools → Application → Cookies&lt;/li&gt;
&lt;li&gt;Copy s_v_web_id value
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;TikTokApi&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TikTokApi&lt;/span&gt;

&lt;span class="n"&gt;verifyFp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_verifyFp_here&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TikTokApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_instance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;custom_verifyFp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;verifyFp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;use_test_endpoints&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Fetch User Data
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;khaby.lame&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;username&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;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Get User Stats
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;stats&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stats&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;followers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stats&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;followerCount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;likes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stats&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;heartCount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;videos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stats&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;videoCount&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Followers:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;followers&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;Total Likes:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;likes&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;Total Videos:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;videos&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Fetch User Videos
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;videos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;user_posts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;video_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;video&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;videos&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;stats&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stats&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="n"&gt;views&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stats&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;playCount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;likes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stats&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;diggCount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;comments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stats&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;commentCount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;shares&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stats&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shareCount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="n"&gt;video_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;views&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;likes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;likes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;comments&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shares&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;shares&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;video_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6: Calculate Engagement Rate
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;calculate_engagement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video_data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;total_views&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;views&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;video_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;total_engagement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;likes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;comments&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shares&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;video_data&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;total_views&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_engagement&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;total_views&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;


&lt;span class="n"&gt;engagement_rate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculate_engagement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video_data&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;Engagement Rate:&lt;/span&gt;&lt;span class="sh"&gt;"&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="n"&gt;engagement_rate&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="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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 7: Estimate Earnings
&lt;/h2&gt;

&lt;p&gt;Simple model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low engagement → $0.02 per 1000 views&lt;/li&gt;
&lt;li&gt;Medium → $0.04&lt;/li&gt;
&lt;li&gt;High → $0.08
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;estimate_earnings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;avg_views&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;engagement_rate&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;engagement_rate&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;cpm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.02&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;engagement_rate&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;cpm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.04&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;cpm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.08&lt;/span&gt;

    &lt;span class="n"&gt;earnings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;avg_views&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;cpm&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;earnings&lt;/span&gt;


&lt;span class="n"&gt;avg_views&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;views&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;video_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;estimated_earnings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;estimate_earnings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;avg_views&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;engagement_rate&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;Estimated Earnings per post: $&lt;/span&gt;&lt;span class="sh"&gt;"&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="n"&gt;estimated_earnings&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 8: Get Video URLs
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;video&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;videos&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;video&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video&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;playAddr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Using an unofficial API, we can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyze TikTok creator performance&lt;/li&gt;
&lt;li&gt;Build engagement tools&lt;/li&gt;
&lt;li&gt;Estimate earnings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is exactly how tools like a TikTok Money Calculator work behind the scenes.&lt;/p&gt;

&lt;p&gt;If you don’t want to code everything from scratch, you can try a ready-made version here:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://ttmoneycalculator.com" rel="noopener noreferrer"&gt;https://ttmoneycalculator.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>tiktok</category>
      <category>api</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
