How to Snipe Specific Items in Azeroth Auction Assassin Using desired_items.json

Azeroth Auction Assassin (AAA) monitors the World of Warcraft Auction House for items listed at or below prices defined in AzerothAuctionAssassinData/desired_items.json, automatically alerting you when snipe opportunities appear.

Azeroth Auction Assassin is an open-source sniper tool that scans WoW auction house data to find underpriced items instantly. To snipe specific items in AAA using desired_items.json, you create a JSON mapping of item IDs to your maximum buyout prices, which the application loads during startup and references during every auction scan.

Creating the desired_items.json File

The snipe list is a simple JSON object stored at AzerothAuctionAssassinData/desired_items.json. Each key is a numeric item ID (as a string or integer), and each value is the maximum price you are willing to pay expressed in gold.

{
  "194641": 5.0,
  "159840": 0.4,
  "168185": 12.5
}
  • Keys: Numeric WoW item IDs (e.g., 194641 for Abyssal Dust).
  • Values: Maximum buyout price in gold (e.g., 5.0 means 5 gold).
  • Location: Save the file as AzerothAuctionAssassinData/desired_items.json in your AAA installation folder.

If you provide a custom path, the MegaData class accepts it via the path_to_desired_items parameter during initialization.

How AAA Loads Your Snipe List

When the application starts, the MegaData class in utils/mega_data_setup.py executes __set_desired_items (lines 86–119) to parse your JSON:

  1. Locates desired_items.json in AzerothAuctionAssassinData or uses your custom path.
  2. Loads the JSON mapping and normalizes keys to int and values to float.
  3. Stores the result in self.DESIRED_ITEMS for fast lookup during scans.
  4. Calls __validate_snipe_lists (lines 64–81) to ensure at least one snipe list (items, pets, ilvl, etc.) is present before proceeding.

If the file is missing or empty, AAA aborts initialization unless another snipe list type is configured.

Auction Scanning and Alert Logic

During each auction scan, mega_alerts.py (lines 244–256) compares live listings against your DESIRED_ITEMS dictionary. The logic performs a currency conversion because the WoW API reports prices in copper while your JSON defines prices in gold:


# Simplified logic from mega_alerts.py

for auction in auction_list:
    item_id = auction["item"]["id"]
    buyout = auction["item"]["buyout"]  # Price in copper

    
    if item_id in mega_data.DESIRED_ITEMS:
        max_price_gold = mega_data.DESIRED_ITEMS[item_id]
        if buyout < max_price_gold * 10000:  # Convert gold to copper

            create_alert(auction)

When an auction meets the criteria, AAA generates a desktop notification and highlights the entry in the UI, allowing you to purchase the item immediately.

Importing Items via the UI

You can load or replace desired_items.json at runtime without restarting the application:

  1. Launch AAA and navigate to the Items tab.
  2. Click "Import Item Data" (handled in AzerothAuctionAssassin.py, lines 106–119).
  3. Select your JSON file in the file picker.

The ItemPage.import_item_data method in AzerothAuctionTarget.py (lines 49–73) validates the JSON structure, ensuring item IDs fall between 1 and 500,000 and prices between 0 and 10,000,000 gold. If validation fails, a message box displays the specific error; if successful, the UI list populates instantly with your snipe targets.

Programmatic Configuration (Advanced)

For automation or custom integrations, instantiate MegaData with an explicit file path:

from utils.mega_data_setup import MegaData

# Load from a custom location

mega = MegaData(path_to_desired_items="/path/to/my_items.json")

# Access the loaded dictionary

print(mega.DESIRED_ITEMS)  # Output: {194641: 5.0, 159840: 0.4}

This approach bypasses the UI entirely and is useful for headless deployments or testing snipe logic against historical auction data.

Summary

  • Place a correctly formatted JSON file at AzerothAuctionAssassinData/desired_items.json containing item ID to gold-price mappings.
  • MegaData.__set_desired_items loads and normalizes this file into self.DESIRED_ITEMS on startup.
  • mega_alerts.py checks every auction listing against your prices, converting gold to copper (multiplying by 10,000) for comparison.
  • Use the "Import Item Data" button to reload snipe lists at runtime without restarting.
  • Validation ensures item IDs range 1–500,000 and prices range 0–10,000,000 gold.

Frequently Asked Questions

What is the exact file path for desired_items.json?

AAA looks for desired_items.json inside the AzerothAuctionAssassinData folder relative to the application root. You can override this default by passing a custom path_to_desired_items argument to the MegaData constructor in utils/mega_data_setup.py.

How does AAA convert gold prices to Auction House API values?

The Auction House API returns buyout prices in copper. AAA multiplies your gold price from desired_items.json by 10,000 (since 1 gold = 10,000 copper) before comparing it to the live auction data in mega_alerts.py.

Can I update my snipe list without restarting AAA?

Yes. Click the "Import Item Data" button in the Items tab to open a file picker and load a new JSON file immediately. The ItemPage.import_item_data method validates the structure and updates the internal items_list dictionary without requiring an application restart.

What validation does AAA perform on the JSON file?

According to AzerothAuctionTarget.py (lines 49–73), AAA validates that item IDs are integers between 1 and 500,000 and that prices are numbers between 0 and 10,000,000 gold. If the JSON is malformed or values exceed these ranges, the UI displays an error message and rejects the import.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →