Skip to main content

Overview

FIFA Bot uses sophisticated pricing algorithms to maximize profits while accounting for EA’s 5% transaction tax and market dynamics.
All prices are in FIFA coins. The bot automatically calculates optimal buy/sell prices based on your profit targets.

Core Pricing Concepts

EA Tax

EA Sports applies a 5% tax on all sales in the Transfer Market.
# Sale price after EA tax
sale_price = 1000
after_tax = sale_price * 0.95  # 950 coins
ea_tax = sale_price * 0.05      # 50 coins
Always account for the 5% EA tax when setting prices. A 10% listed profit becomes only 5% actual profit after tax.

Price Tiers

The bot uses different increment strategies based on price ranges:
Increment: 50 coins
if price < 1000:
    price_adjustment = 50
Strategy:
  • Smaller absolute margins
  • Higher percentage returns
  • Faster turnover
Increment: 100 coins
if 1000 <= price < 10000:
    price_adjustment = 100
Strategy:
  • Balanced risk/reward
  • Most common price range
  • Consistent volume
Increment: 500 coins
if 10000 <= price < 50000:
    price_adjustment = 500
Strategy:
  • Higher absolute profits
  • Lower percentage returns
  • Slower turnover
Increment: 500 coins
if price >= 50000:
    price_adjustment = 500
Strategy:
  • Large capital required
  • Significant profits per sale
  • Very slow turnover

Dynamic Price Range Algorithm

The buscarRango() and revisarPrecio() functions automatically find optimal price ranges.

Algorithm Flow

1

Start from Target Sale Price

precioVentaActual = int(final.get())  # Target sale price
Begin with your desired sale price.
2

Search Market at Current Price

campo = driver.find_element_by_xpath(
    "/html/body/main/section/section/div[2]/div/div[2]/div/div[1]/div[2]/div[6]/div[2]/input"
)
campo.click()
time.sleep(2)
campo.send_keys(precioVentaActual)
clickBuscar()
Search for items at the current price point.
3

Count Available Items

num_items = len(driver.find_elements_by_xpath(
    "/html/body/main/section/section/div[2]/div/div/section[1]/div/ul/li"
))
Determine how many items are listed at this price.
4

Adjust Price Based on Supply

If no items found (num_items == 0):
if bandera == 0:
    # Price too low, increase it
    if precioVentaActual < 1000:
        precioVentaActual = precioVentaActual + 50
    elif precioVentaActual < 10000:
        precioVentaActual = precioVentaActual + 100
    elif precioVentaActual < 50000:
        precioVentaActual = precioVentaActual + 500
    else:
        precioVentaActual = precioVentaActual + 500
If too many items (num_items > 4):
# Price too high, decrease it
if precioVentaActual < 1000:
    precioVentaActual = precioVentaActual - 50
elif precioVentaActual < 10000:
    precioVentaActual = precioVentaActual - 100
elif precioVentaActual < 50000:
    precioVentaActual = precioVentaActual - 500
else:
    precioVentaActual = precioVentaActual - 500
bandera = 1  # Mark that we've found supply
If optimal supply (1-4 items):
  • Price is good, proceed to calculate purchase price
5

Calculate Purchase Price

Once optimal sale price is found:
# For low price tier (< 1,000)
if precioVentaActual < 1000:
    maximo = round((precioVentaActual * 0.95) - (precioVentaActual * 0.20)) - 50
    final = precioVentaActual
    inicial = precioVentaActual - 50

# For medium/high price tiers (>= 1,000)
elif precioVentaActual < 10000:
    maximo = round((precioVentaActual * 0.95) - (precioVentaActual * 0.05)) - 100
    final = precioVentaActual
    inicial = precioVentaActual - 100

# For premium tier
elif precioVentaActual < 50000:
    maximo = round((precioVentaActual * 0.95) - (precioVentaActual * 0.05)) - 500
    final = precioVentaActual
    inicial = precioVentaActual - 500

else:  # 50,000+
    maximo = round((precioVentaActual * 0.95) - (precioVentaActual * 0.05)) - 500
    final = precioVentaActual
    inicial = precioVentaActual - 500
6

Send Notification

enviarWhatsapp(f"Nuevo Rango Compra: {maximo} Venta: {final}")
Alert you of the new price range via WhatsApp.

Supply-Based Pricing Logic

0 Items

Market undersuppliedIncrease sale price to find market ceilingContinue searching upward

1-4 Items

Optimal supplyCalculate purchase priceLock in this range

5+ Items

Market oversuppliedDecrease sale priceFind competitive price point

Profit Margin Formulas

buscarRango() Profit Calculation

Used when finding new price ranges without specific profit targets.
# Target: 70-75% of sale price after tax
sale_price = 1000
max_buy = round((sale_price * 0.95) - (sale_price * 0.20)) - 50
# max_buy = round((1000 * 0.95) - (1000 * 0.20)) - 50
# max_buy = round(950 - 200) - 50
# max_buy = 700

profit = (sale_price * 0.95) - max_buy
# profit = 950 - 700 = 250 coins (25% margin)

revisarPrecio() Profit Calculation

Used when you have a specific expected profit target (iEsperada).
# Use the iEsperada field from GUI
sale_price = 5000
expected_profit = int(iEsperada.get())  # e.g., 300

max_buy = round((sale_price * 0.95) - expected_profit)
# max_buy = round((5000 * 0.95) - 300)
# max_buy = round(4750 - 300)
# max_buy = 4450

profit = (sale_price * 0.95) - max_buy
# profit = 4750 - 4450 = 300 coins (guaranteed)
Use buscarRango() for initial market discovery and revisarPrecio() for fine-tuning based on your specific profit goals.

Price Configuration

Manual Price Setting

Set prices directly in the GUI:
maximo
number
required
Maximum Buy PriceThe highest price the bot will pay for items
maximo.insert(0, 1200)  # Won't buy above 1,200 coins
inicial
number
required
Minimum Sale PriceStarting bid price when listing items
inicial.insert(0, 1300)  # Lists at 1,300 minimum
final
number
required
Maximum Sale Price (Buy Now)Buy Now price for listed items
final.insert(0, 1500)  # Buy Now at 1,500 coins
iEsperada
number
Expected ProfitTarget profit per transaction (for revisarPrecio())
iEsperada.insert(0, 200)  # Target 200 coins profit
iReal
number
Actual ProfitCalculated real profit after EA tax
iReal = (int(final.get()) * 0.95) - int(maximo.get())
# iReal = (1500 * 0.95) - 1200 = 225 coins

Example Price Configurations

# Target: 15-20% profit margin
maximo.insert(0, 1000)   # Buy at 1,000
inicial.insert(0, 1150)  # List at 1,150
final.insert(0, 1200)    # Sell at 1,200

# Profit calculation:
profit = (1200 * 0.95) - 1000
# profit = 1140 - 1000 = 140 coins (14% margin)
Pros:
  • Higher success rate
  • Faster sales
  • Lower risk
Cons:
  • Lower profit per card
  • Requires high volume
# Target: 8-12% profit margin
maximo.insert(0, 5000)   # Buy at 5,000
inicial.insert(0, 5300)  # List at 5,300
final.insert(0, 5500)    # Sell at 5,500

# Profit calculation:
profit = (5500 * 0.95) - 5000
# profit = 5225 - 5000 = 225 coins (4.5% margin)
Pros:
  • Good balance of volume and profit
  • Moderate competition
  • Consistent returns
Cons:
  • Market fluctuations impact success
  • Requires price monitoring
# Target: 5-8% profit margin
maximo.insert(0, 50000)  # Buy at 50,000
inicial.insert(0, 52000) # List at 52,000
final.insert(0, 53500)   # Sell at 53,500

# Profit calculation:
profit = (53500 * 0.95) - 50000
# profit = 50825 - 50000 = 825 coins (1.65% margin)
Pros:
  • High absolute profits
  • Less competition at high prices
  • Fewer transactions needed
Cons:
  • Large capital required
  • Slow turnover
  • Higher risk of market crashes
# Target: 10-15% margin, maximum speed
maximo.insert(0, 400)    # Buy at 400
inicial.insert(0, 450)   # List at 450
final.insert(0, 500)     # Sell at 500

# Profit calculation:
profit = (500 * 0.95) - 400
# profit = 475 - 400 = 75 coins (18.75% margin)

# But with high volume:
# 20 sales/hour * 75 profit = 1,500 coins/hour
Pros:
  • Very fast turnover
  • High percentage margins
  • Low capital required
Cons:
  • Small profit per card
  • Requires constant operation
  • More bot competition

Dynamic Range Adjustment

Automatically recalculate price ranges based on market conditions.
1

Enable Dynamic Ranging

# In GUI, check the "Buscar Rango" checkbox
eR.set(1)  # Enable dynamic ranging
numeroRango.insert(0, 31)  # Recalculate every 31 searches
2

Set Recalculation Frequency

numeroRango
number
default:31
How often to recalculate price range (in number of searches)
if int(eR.get()) == 1:
    if int(cuantos) % int(numeroRango.get()) == 0:
        enviarWhatsapp(f"Van {cuantos}")
        enviarWhatsapp("Calculando Rango")
        revisarPrecio()  # Recalculate based on iEsperada
3

Monitor Price Changes

The bot notifies you of price adjustments:
"Van 150"  # Progress update
"Calculando Rango"  # Starting recalculation
"Nuevo Rango Compra: 1200 Venta: 1500"  # New range
Dynamic ranging can cause price fluctuations if the market is volatile. Monitor your first few recalculations to ensure prices remain profitable.

Advanced Pricing Techniques

Minimum Search Price Adjustment

The bot adjusts minimum search prices to avoid missing deals:
def aumentaMinimoCompraYa():
    # Increase minimum "Buy Now" price by 1 increment
    driver.find_element_by_xpath(
        "/html/body/main/section/section/div[2]/div/div[2]/div/div[1]/div[2]/div[5]/div[2]/button[2]"
    ).click()

def disminuyeMinimoCompraYa():
    # Decrease minimum "Buy Now" price by 3 increments
    for x in range(0, 3):
        driver.find_element_by_xpath(
            "/html/body/main/section/section/div[2]/div/div[2]/div/div[1]/div[2]/div[5]/div[2]/button[1]"
        ).click()
Strategy:
if espera == 3:
    aumentaMinimoCompraYa()  # Search higher prices
    espera = espera + 1
else:
    disminuyeMinimoCompraYa()  # Search lower prices
    espera = espera - 1
This oscillation ensures the bot searches across the entire price spectrum.

Maximum Price Boundary

def precioMaximoBusqueda():
    precioMax = driver.find_element_by_xpath(
        "/html/body/main/section/section/div[2]/div/div[2]/div/div[1]/div[2]/div[6]/div[2]/input"
    )
    precioMax.click()
    time.sleep(1)
    precioMax.send_keys(maximo.get())
Sets the upper limit to prevent buying overpriced items.

Stop Price (numeroDetener)

numeroDetener.insert(0, 1000)  # Stop when price drops below 1,000
Prevents the bot from operating in unprofitable price ranges during market crashes.

Profit Optimization Tips

EA Tax Awareness

Always calculate profit AFTER 5% tax:
net_profit = (sale * 0.95) - cost
Never use gross profit for decisions.

Price Tier Strategy

Higher margins on low-value cards:
  • < 1K: 20% margins
  • 1-10K: 10% margins
  • 10K+: 5% margins

Supply Monitoring

Optimal supply: 1-4 items
  • Too few: Increase sale price
  • Too many: Decrease sale price
  • Just right: Lock in range

Dynamic Adjustment

Recalculate every 30-50 searches:
numeroRango.insert(0, 31)
Adapts to market changes.

Pricing FAQ

It depends on price tier:
  • Low tier (< 1K): 15-25% margins are achievable
  • Medium tier (1-10K): 8-15% margins are realistic
  • High tier (10K+): 5-10% margins are competitive
Remember: EA tax reduces all margins by 5 percentage points.
buscarRango():
  • Initial market discovery
  • No specific profit target
  • Dynamic margins based on price tier
  • Better for testing new filters
revisarPrecio():
  • Fine-tuning existing ranges
  • Specific profit target (iEsperada)
  • Consistent margins across prices
  • Better for stable markets
Start with buscarRango(), then switch to revisarPrecio() once you know your target profit.
Volatile markets: Every 15-30 searchesStable markets: Every 30-50 searchesHigh-value items: Every 10-20 searches (higher risk)Monitor your WhatsApp notifications to see if ranges are changing significantly.
Causes:
  1. Sale price too high
  2. Market oversupplied
  3. Card demand dropped
Solutions:
  1. Run revisarPrecio() to update range
  2. Decrease final price by 5-10%
  3. Check if SBC ended (if selling SBC fodder)
  4. Wait for market recovery
Not recommended.Even at high volume, negative margins lose money. Instead:
  1. Target different filters with natural demand
  2. Use tighter margins (3-5%) on high-volume items
  3. Ensure iReal is always positive
# Always verify profit is positive
iReal = (final.get() * 0.95) - maximo.get()
if iReal <= 0:
    print("UNPROFITABLE - Adjust prices")

Next Steps

Core Features

Learn how the bot uses these prices for automated trading

FAQ

Safety tips and optimization strategies

Build docs developers (and LLMs) love