{
  "slug": "stock-photo-income",
  "title": "Stock Photo Income Calculator",
  "heading": "Stock Photography Income Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/stock-photo-income",
  "summary": "Portfolio size, download rate, and RPI to a monthly income.",
  "description": "Stock income is a portfolio game: revenue per image per month (RPI) times the number of images online. Model how many uploads it takes to reach a target income at your actual RPI instead of guessing.",
  "formula": "Monthly income = portfolio size × RPI; images needed = target ÷ RPI.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=stock-photo-income",
  "inputs": [
    {
      "id": "images",
      "label": "Images currently online",
      "kind": "number",
      "hint": null,
      "default": 1200,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "rpi",
      "label": "Revenue per image per month",
      "kind": "number",
      "hint": null,
      "default": 0.28,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "uploads",
      "label": "New images uploaded per month",
      "kind": "number",
      "hint": null,
      "default": 120,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "months",
      "label": "Projection horizon",
      "kind": "number",
      "hint": null,
      "default": 24,
      "unit": "months",
      "min": 1,
      "max": 120
    },
    {
      "id": "target",
      "label": "Target monthly income",
      "kind": "number",
      "hint": null,
      "default": 2000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "shootCost",
      "label": "Cost to produce 100 images",
      "kind": "number",
      "hint": null,
      "default": 180,
      "unit": "$",
      "min": 0,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "now",
      "label": "Current monthly income",
      "format": "currency",
      "hint": null,
      "primary": true
    },
    {
      "id": "future",
      "label": "Income at end of horizon",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "annual",
      "label": "Annualized at that point",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "needed",
      "label": "Images needed for target",
      "format": "number",
      "hint": null,
      "primary": false
    },
    {
      "id": "monthsToTarget",
      "label": "Months to hit target",
      "format": "decimal",
      "hint": null,
      "primary": false
    },
    {
      "id": "cost",
      "label": "Production cost to get there",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Images currently online: 1200",
      "Revenue per image per month: 0.28 $",
      "New images uploaded per month: 120",
      "Projection horizon: 24 months",
      "Target monthly income: 2000 $",
      "Cost to produce 100 images: 180 $"
    ],
    "outputs": [
      "Current monthly income: $336.00",
      "Income at end of horizon: $1,142.40",
      "Annualized at that point: $13,709",
      "Images needed for target: 7,143",
      "Months to hit target: 49.5",
      "Production cost to get there: $10,697"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter images currently online.",
      "Enter revenue per image per month ($).",
      "Enter new images uploaded per month.",
      "Enter projection horizon (months).",
      "Enter target monthly income ($).",
      "Enter cost to produce 100 images ($).",
      "Read your current monthly income on the right — it updates as you type.",
      "Hit Share to keep the scenario or send it to someone."
    ]
  },
  "scenarios": [
    {
      "name": "Conservative",
      "description": "Lower-end numbers — what if things land soft?",
      "values": {
        "images": 700,
        "rpi": 0.168,
        "uploads": 70,
        "months": 14,
        "target": 1200,
        "shootCost": 110
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "images": 1200,
        "rpi": 0.28,
        "uploads": 120,
        "months": 24,
        "target": 2000,
        "shootCost": 180
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "images": 1900,
        "rpi": 0.44800000000000006,
        "uploads": 190,
        "months": 38,
        "target": 3200,
        "shootCost": 290
      }
    }
  ],
  "limitations": [
    "Results are estimates before tax, fees, and inflation unless an input explicitly covers them.",
    "Rates are treated as fixed for the whole period — variable-rate products will drift from this projection.",
    "This is educational maths, not financial advice. Check anything contractual with the lender or your accountant."
  ],
  "faq": [
    {
      "q": "What RPI should I expect?",
      "a": "Microstock contributors commonly report $0.10–$0.40 per image per month across the big agencies. Well-targeted commercial and lifestyle work sits at the top of that range; travel snapshots sit far below it."
    },
    {
      "q": "Does it decay over time?",
      "a": "Individual images do, but a growing portfolio usually outruns decay for the first few years. Keywording quality and subject demand matter more than upload volume alone."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/photography-day-rate",
    "https://www.revenuelab.fyi/toolbox/photo-storage-cost"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Stock Photo Income Calculator (https://www.revenuelab.fyi/toolbox/stock-photo-income)"
}