What Is Snipe-IT? Why You Need It

Snipe-IT is a free, open-source IT Asset Management (ITAM) system built on Laravel 12 (PHP) and licensed under AGPL-3.0. With over 10,000 stars on GitHub, it's the most popular open-source asset management tool in the world.

💡 The core problem it solves: Your team has 10 laptops, 5 monitors, and 20 software licenses — who's using which device? Which license is about to expire? When should you write something off as depreciated? Managing this in Excel will turn into a mess sooner or later. That's exactly why Snipe-IT exists.

Feature Overview

Feature Description
📦 Hardware Asset Management Full lifecycle tracking for laptops, servers, phones, monitors, and more
🔑 License Management Track purchase dates, expiration alerts, and seat counts for software licenses
🖱️ Accessory Management Track inventory of consumables like mice, keyboards, and cables
📋 Check-Out / Check-In Check out assets to employees, record condition and notes on check-in
📊 Depreciation Calculation Automatically calculate asset depreciation by year or month
🔌 REST API Full JSON API — integrate with Jenkins, Ansible, Jamf, and more
🌐 Multi-Language Supports 40+ languages (including Chinese)
📱 Mobile-Friendly Responsive web UI — manage assets from your phone too

Snipe-IT vs. Commercial Alternatives

Comparison Snipe-IT (Self-Hosted) Snipe-IT Cloud JAMF Pro Freshservice
Cost Completely free From $399/year ~$100/device/year ~$49/user/month
Data Sovereignty Your server, your control Cloud-hosted Cloud-hosted Cloud-hosted
Customization Fully customizable Limited High Medium
Deployment Effort One-click Docker deploy No deployment needed Requires MDM setup SaaS, ready to go
Ideal Scale 10–1,000+ devices 10–500 devices 50+ Apple devices 50+ person teams

One-Click Docker Deployment

Snipe-IT provides an official Docker image. With Docker Compose, you can have it running in under 5 minutes.

Prerequisites

  • Docker 20+ and Docker Compose 2+
  • At least 2 GB RAM (4 GB recommended)
  • 10 GB of free disk space

Step 1: Create the Project Directory

mkdir -p ~/snipe-it && cd ~/snipe-it

Step 2: Write the Docker Compose File

Create docker-compose.yml:

version: '3.8'

services:
  snipeit-db:
    image: mysql:8.0
    container_name: snipeit-db
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword123
      MYSQL_DATABASE: snipeit
      MYSQL_USER: snipeit
      MYSQL_PASSWORD: snipeit_password_456
    volumes:
      - db-data:/var/lib/mysql
    restart: always
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  snipeit:
    image: snipe/snipe-it:latest
    container_name: snipe-it
    ports:
      - "8080:80"
    environment:
      # Database config
      DB_HOST: snipeit-db
      DB_DATABASE: snipeit
      DB_USERNAME: snipeit
      DB_PASSWORD: snipeit_password_456
      # App config
      APP_KEY: base64:CHANGE_ME_GENERATE_KEY
      APP_ENV: production
      APP_DEBUG: false
      APP_URL: http://localhost:8080
      APP_TIMEZONE: Asia/Shanghai
      APP_LOCALE: en
      # Email config (optional)
      MAIL_PORT_587_TCP_ADDR: smtp.example.com
      MAIL_PORT_587_TCP_PORT: 587
      MAIL_ENV_FROM_ADDR: admin@yourcompany.com
      MAIL_ENV_FROM_NAME: Snipe-IT Admin
      MAIL_ENV_ENCRYPTION: tls
      MAIL_ENV_USERNAME: admin@yourcompany.com
      MAIL_ENV_PASSWORD: your-email-password
    depends_on:
      snipeit-db:
        condition: service_healthy
    volumes:
      - snipeit-images:/var/lib/snipeit
    restart: always

volumes:
  db-data:
  snipeit-images:

⚠️ Important: Don't just leave APP_KEY as-is — you need to generate it first.

Step 3: Generate the APP_KEY

# Spin up a temporary container to generate the key
docker run --rm snipe/snipe-it:latest php artisan key:generate --show

# Output looks like: base64:abcdef1234567890...
# Replace the APP_KEY value in docker-compose.yml with this output

Step 4: Start the Services

docker compose up -d

# Check the logs to confirm everything started
docker compose logs -f snipeit

Step 5: Access the Web UI

Open http://localhost:8080 in your browser. You'll see the setup wizard:

  1. Environment check (everything should be green ✓)
  2. Create an admin account (username, email, password)
  3. Done! You're in the dashboard.

🔒 For production: Set up Nginx as a reverse proxy with a Let's Encrypt HTTPS cert — change http://localhost:8080 to something like https://snipeit.yourcompany.com.


Getting Started: 5 Steps to Managing Assets

Once installed, follow these steps to enter your first batch of assets.

Step 1: Set Up Company Info & Branding

Go to Admin → Settings → Branding. Upload your company logo, set the site name, and configure the default timezone.

Step 2: Create Asset Categories

Snipe-IT organizes assets by category. Go to Admin → Categories and create:

Category Name Type Use Case
Laptops Asset MacBooks, ThinkPads, etc.
Monitors Asset External displays
Software Licenses License Office, Adobe, etc.
Accessories Accessory Mice, keyboards, cables
Consumables Consumable Printer paper, ink cartridges

Step 3: Add a Hardware Asset

Go to Assets → New Asset and fill in:

Asset Name: MacBook Pro 14" M3
Asset Tag: MBP-2026-001     ← This is the unique identifier; use a consistent naming scheme
Category: Laptops
Status: Ready to Deploy
Location: HQ Office
Purchase Date: 2026-03-15
Purchase Cost: $1,999
Supplier: Apple Store
Warranty Expires: 2029-03-15
Model: MacBook Pro 14-inch M3 Pro
Serial Number: C02XXXXX

Step 4: Assign It to an Employee (Check-Out)

On the asset detail page, click Check Out:

Assign to: User (must be created in People first)
Expected Check-In Date: 2027-03-15 (optional)
Note: For the new R&D project
Send notification email: ✓

The employee confirms receipt via email, and the asset status changes to Deployed.

Step 5: Bulk Import

Got a spreadsheet? Snipe-IT supports CSV bulk import:

  1. Admin → Import → Download CSV Template
  2. Fill in your asset data using the template
  3. Upload the CSV file
  4. Preview and confirm field mappings
  5. Click Import

Advanced Features in Action

1. Automatic Asset Depreciation

Snipe-IT supports multiple depreciation models so you always know the current value of your assets.

Go to Admin → Depreciations to create a depreciation rule:

Name: 3-Year Straight-Line (Computers)
Months: 36 (3 years)
Depreciation Type: Straight-Line

Then associate this rule with your assets. The system will auto-calculate:

Date Original Value Depreciated Value Note
2026-03 $1,999 $1,999 Just purchased
2027-03 $1,999 $1,333 1 year in
2028-03 $1,999 $666 2 years in
2029-03 $1,999 $0 Fully depreciated

2. License Management & Expiration Alerts

Software license expired and nobody noticed? Snipe-IT keeps watch for you.

Add a license:

Name: Microsoft 365 Business
License Key: XXXX-XXXX-XXXX-XXXX
Total Seats: 25
Assigned: 18
Purchase Date: 2026-01-01
Expiration Date: 2027-01-01
Supplier: Microsoft
Purchase Cost: $149/user/year

When a license is about to expire, the system will: - 📧 Send an email alert to admins - 🔴 Show a red warning on the dashboard - 📊 Highlight it in reports

3. Custom Fields — Track Whatever You Need

Snipe-IT lets you add custom fields to any category:

# Via Admin → Custom Fields
Field Name       Type          Format
CPU Model        Text
RAM Size         Text
Operating System Dropdown      macOS, Windows, Linux
Department       Dropdown      Engineering, Product, Design
LAN IP Address   Text          ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$

4. Reports & Auditing

Snipe-IT comes with several built-in reports:

  • Asset Inventory Report — Full list of all assets, filterable by status/location/category
  • Depreciation Report — Asset depreciation over a given time period
  • Unassigned Assets Report — Idle assets at a glance, so nothing sits unused
  • License Expiration Report — Software licenses about to expire
  • Audit Report — Asset check history: who confirmed what, and when

5. API Integration in Practice

Snipe-IT provides a full REST API you can call with curl or any HTTP client.

Get an API Token: Go to Profile → Generate API Token

Query all assets:

curl -X GET "https://snipeit.yourcompany.com/api/v1/hardware" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Create a new asset:

curl -X POST "https://snipeit.yourcompany.com/api/v1/hardware" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Dell XPS 15",
    "asset_tag": "DELL-2026-001",
    "model_id": 3,
    "status_id": 1,
    "rtd_location_id": 1,
    "purchase_date": "2026-07-30",
    "purchase_cost": "9999.00",
    "serial": "SN123456789"
  }'

Integrate into your CI/CD pipeline — for example, auto-create an asset record when onboarding a new employee:

#!/usr/bin/env python3
"""Auto-create IT asset records for new employee onboarding"""

import requests

SNIPE_URL = "https://snipeit.yourcompany.com/api/v1"
API_TOKEN = "YOUR_API_TOKEN"

def onboard_employee(name, email, asset_tag, model_id=1):
    """Assign a laptop to a new employee"""
    headers = {
        "Accept": "application/json",
        "Authorization": f"Bearer {API_TOKEN}",
        "Content-Type": "application/json",
    }

    # 1. Create user
    user = requests.post(f"{SNIPE_URL}/users", headers=headers, json={
        "first_name": name.split()[0],
        "last_name": name.split()[-1],
        "username": email.split("@")[0],
        "email": email,
    })

    if user.status_code != 200:
        print(f"Failed to create user: {user.text}")
        return

    user_id = user.json()["payload"]["id"]

    # 2. Check out asset
    checkout = requests.post(
        f"{SNIPE_URL}/hardware/{asset_tag}/checkout",
        headers=headers,
        json={"assigned_user": user_id}
    )

    if checkout.status_code == 200:
        print(f"✅ {name} has been assigned asset {asset_tag}")
    else:
        print(f"❌ Asset assignment failed: {checkout.text}")

# Usage example
onboard_employee("John Doe", "john@company.com", "MBP-2026-015")

Day-to-Day Operations

Back Up the Database

# Export the database
docker exec snipeit-db mysqldump -u snipeit -psnipeit_password_456 snipeit > \
  ~/backup/snipeit-$(date +%Y%m%d).sql

# Export the persistent data volume
tar czf ~/backup/snipeit-images-$(date +%Y%m%d).tar.gz \
  /var/lib/docker/volumes/snipe-it_snipeit-images/

Upgrade Snipe-IT

cd ~/snipe-it

# Pull the latest image
docker compose pull snipeit

# Recreate the container
docker compose up -d snipeit

# Check the version
docker exec snipe-it php artisan snipeit:version

Troubleshooting Common Issues

Problem Solution
Page 500 error Check docker compose logs snipeit for Laravel error logs
Database connection failed Confirm DB_HOST is snipeit-db (the container name) and the DB is ready
Emails not sending Check SMTP config; make sure the firewall isn't blocking port 587
APP_KEY error Regenerate the key; make sure the format is base64:xxxx
File upload fails Check the mount permissions on the snipeit-images volume

Why Snipe-IT Is Worth the Long-Term Investment

Snipe-IT has been actively developed for 13 years since its open-source release in 2013, with over 500 contributors on GitHub. Compared to spreadsheets or commercial SaaS solutions, here's what makes it stand out:

  1. Zero licensing costs — Spin up your own server and go; no per-user limits
  2. Full data sovereignty — All your asset data stays on your own infrastructure
  3. Active community — The Discord community and forums are full of users sharing tips and tricks
  4. Rich integration ecosystem — Official and third-party integration scripts for JAMF, Kandji, Jira, Google Workspace, and more
  5. Highly scalable — Handles everything from 10 devices to 10,000

If you're still managing company assets in Excel, or you think commercial ITAM tools are too expensive, Snipe-IT is the most practical choice.