IT inventory management solution integrating Microsoft Lists, Power Apps, Power Automate, and Snipe-IT to simplify asset registration, updates, removals, approvals, and master-data synchronization.
The solution was designed to reduce manual work, improve data consistency, and provide a controlled interface for managing inventory records without requiring users to work directly inside Snipe-IT.
Inventory management was originally performed directly in Snipe-IT, which created several operational challenges:
- Inconsistent naming of companies, locations, models, manufacturers, and suppliers.
- Manual asset registration and updates.
- Limited validation before data reached the inventory platform.
- Risk of incomplete or incorrect information.
- Difficulty maintaining standardized master data.
- No centralized approval workflow for inventory changes.
- Multiple assets had to be registered manually when several units of the same equipment were received.
The goal of this project was to provide a simpler and more controlled workflow while keeping Snipe-IT as the system of record.
The solution introduces a Power Platform layer in front of Snipe-IT.
Users interact with a customized Power Apps interface, while requests are stored temporarily in Microsoft Lists and processed by Power Automate.
Power Automate communicates with the Snipe-IT REST API to create, update, delete, and retrieve inventory information.
A second automated flow synchronizes master data from Snipe-IT back into Microsoft Lists so that Power Apps always presents current options.
| Component | Purpose |
|---|---|
| Power Apps | User interface for asset creation, modification, and removal requests |
| Microsoft Lists | Temporary request and control layer |
| Power Automate | Approvals, validation, API integration, notifications, and synchronization |
| Snipe-IT | Inventory system of record |
| Snipe-IT REST API | Integration layer used by Power Automate |
┌─────────────────┐
│ Power Apps │
│ Inventory Form │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Microsoft Lists │
│ Request Layer │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Power Automate │
│ Main Workflow │
└────────┬────────┘
│ REST API
▼
┌─────────────────┐
│ Snipe-IT │
│ System of Record│
└────────┬────────┘
│
│ Scheduled master-data sync
▼
┌─────────────────┐
│ Power Automate │
│ Master Sync │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Microsoft Lists │
│ Choice Fields │
└─────────────────┘
The creation workflow supports:
- Approval before inventory changes are applied.
- Single or multiple asset creation.
- Independent serial numbers for multiple assets.
- Automatic validation between asset quantity and number of serials.
- Support for
N/Aserial values when required. - Automatic Asset Tag generation.
- Existing or newly created companies.
- Existing or newly created locations.
- Existing or newly created suppliers.
- Existing or newly created manufacturers.
- Existing or newly created models.
- Automatic association with category and status information.
- Optional purchase information.
- Optional asset image upload.
- Image validation limited to one file with a maximum size of 500 KB.
- Confirmation and rejection notifications.
The modification workflow allows controlled updates to:
- Asset status.
- Asset location.
Before an approval is generated, the workflow validates that the submitted Asset Tag exists in Snipe-IT.
If the asset does not exist:
- The approval is not generated.
- The user receives an Asset Not Found notification.
- The invalid request is removed from Microsoft Lists.
- The flow terminates cleanly.
Existing asset values are preserved when they are not part of the requested modification.
The removal workflow also validates the Asset Tag before requesting approval.
If the asset exists:
- An approval request is generated.
- If approved, the asset is deleted through the Snipe-IT API.
- A confirmation email is sent.
If the asset does not exist, no approval is generated. The requester is notified and the invalid Microsoft Lists record is removed.
Several validation layers were implemented to reduce avoidable errors.
The application prevents submission when required data is missing.
For new assets, quantity must:
- Be numeric.
- Be an integer.
- Be greater than or equal to 1.
The number of serial values must also match the requested quantity.
Valid example:
Quantity: 3
Serials: SN001, SN002, SN003
Invalid example:
Quantity: 3
Serials: SN001, SN002
Values such as the following are also supported when a physical serial number is unavailable:
Quantity: 3
Serials: N/A, N/A, N/A
The Save button remains disabled until the required conditions are satisfied.
Dynamic values used in Snipe-IT API search parameters are encoded with uriComponent().
This protects queries when names contain characters such as:
+ & / # % ?
The protection is used in dynamic searches for models, manufacturers, companies, locations, suppliers, and relevant modification lookups.
Snipe-IT may return HTTP 200 even when an Asset Tag does not exist, with a response similar to:
{
"status": "error",
"messages": "Asset not found"
}For that reason, the workflow validates the API response body instead of relying only on the HTTP status code.
Invalid modification and removal requests are handled before an approval is generated.
Inventory operations are controlled through Power Automate approvals.
The creation approval presents the information required to authorize a new inventory record.
The content adapts to the request so that unnecessary fields are not displayed when they do not apply.
Modification approvals display only the fields that are actually being changed.
For example, a status-only request does not display an empty location field.
The removal approval identifies the Asset Tag and clearly warns that approval will remove the asset from Snipe-IT.
Rejected requests are removed from the temporary Microsoft Lists request layer, and the requester receives the rejection reason.
A second Power Automate flow synchronizes master data from Snipe-IT to Microsoft Lists every day at 2:00 AM.
The synchronized master data includes:
- Companies
- Locations
- Models
- Manufacturers
- Suppliers
The flow retrieves the current records through the Snipe-IT REST API and updates the corresponding Microsoft Lists Choice fields.
Special options are preserved so users can request new master-data records when necessary:
NUEVA COMPAÑIA
NUEVA UBICACION
NUEVO MODELO
NUEVO FABRICANTE
NUEVO PROVEEDOR
This keeps the Power Apps dropdown values aligned with Snipe-IT without requiring manual maintenance of each Choice field.
Asset images are optional.
Power Apps restricts uploads to:
Maximum files: 1
Maximum size: 500 KB
When an image is provided, Power Automate prepares a multipart request and uploads the file to the corresponding Snipe-IT asset after creation.
The Snipe-IT API credential is centralized in each Power Automate flow through:
varSnipeApiToken
HTTP actions dynamically build the authorization header from that value rather than storing a separate token in every HTTP action.
This simplifies future credential rotation and reduces duplicated credential configuration.
As part of the final validation:
- A new API token was generated.
- Both Power Automate flows were migrated to the new token.
- Asset creation, modification, removal, and master-data synchronization were successfully tested.
- The previous API token was revoked.
Security note: No API tokens, credentials, internal IP addresses, email addresses, or sensitive production data are included in this repository.
-
Architecture and Workflow
End-to-end architecture, request lifecycle, validation layers, and design decisions. -
Microsoft Lists
Temporary request layer, synchronized Choice fields, request lifecycle, and data structure. -
Power Apps
User interface, operating modes, required fields, validation logic, and attachment controls. -
Power Automate
Main automation flow, approvals, Asset Tag validation, API operations, error handling, and master-data synchronization. -
Snipe-IT Integration
REST API integration, asset operations, master-data endpoints, search handling, and security considerations. -
images/
Sanitized screenshots used throughout the documentation.
- REST API integration with Snipe-IT.
- Conditional approval workflows.
- Dynamic creation of related master-data records.
- Multiple asset creation from a single request.
- Automatic Asset Tag generation.
- Partial asset updates while preserving existing values.
- Asset Tag pre-validation before modification and removal approvals.
- Dynamic approval content.
- Multipart image upload.
- Scheduled master-data synchronization.
- URL-safe API searches using
uriComponent(). - Centralized API credential configuration.
- Controlled cleanup of rejected and invalid requests.
The current implementation was built around the available Microsoft 365 and Snipe-IT environment.
Potential future improvements include:
- Moving secrets to a dedicated secret-management solution.
- Packaging Power Platform components into a managed Solution.
- Using environment variables for deployment across environments.
- Creating a custom connector for the Snipe-IT API.
- Improving historical master-data normalization.
- Adding centralized execution and error monitoring.
- Expanding asset modification capabilities if operational requirements change.
These are potential architectural improvements rather than requirements for the current implementation.
The approved request is ultimately reflected in Snipe-IT, which remains the system of record for the inventory.
Completed, functionally validated, and in operational use.
The following scenarios were tested successfully:
- Single asset creation.
- Multiple asset creation.
- Quantity and serial validation.
- Existing master-data selection.
- Dynamic master-data creation.
- Asset image upload.
- Asset status modification.
- Asset location modification.
- Asset Tag validation.
- Asset removal.
- Approval rejection workflows.
- Invalid Asset Tag handling.
- Master-data synchronization.
- API credential rotation.
The solution has also been successfully used in real inventory operations to register newly acquired assets. Approved requests were processed automatically and the corresponding asset records were created in Snipe-IT with their associated inventory data.
Operational validation of real asset update scenarios is still ongoing as equipment is deployed and inventory changes occur.






