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

> Learn to snipe specific items in Azeroth Auction Assassin using desired_items.json. Automate your World of Warcraft auction house searches and snag deals effortlessly.

- Repository: [FF14 Advanced Market Search/azerothauctionassassin](https://github.com/ff14-advanced-market-search/azerothauctionassassin)
- Tags: how-to-guide
- Published: 2026-03-01

---

**Azeroth Auction Assassin (AAA) monitors the World of Warcraft Auction House for items listed at or below prices defined in [`AzerothAuctionAssassinData/desired_items.json`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/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`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/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`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/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**.

```json
{
  "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`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/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`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/utils/mega_data_setup.py) executes `__set_desired_items` (lines 86–119) to parse your JSON:

1. Locates [`desired_items.json`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/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`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/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:

```python

# 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`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/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`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/AzerothAuctionAssassin.py), lines 106–119).
3. Select your JSON file in the file picker.

The `ItemPage.import_item_data` method in [`AzerothAuctionTarget.py`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/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:

```python
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`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/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`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/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`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/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`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/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`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/desired_items.json) by **10,000** (since 1 gold = 10,000 copper) before comparing it to the live auction data in [`mega_alerts.py`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/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`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/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.