---
updatedAt: 2026-04-21T17:58:34.000Z
agentTools:
  projectIndex: https://docs.bloomberry.com/llms.txt
---

# Get recent tech stack changes

Returns companies that added or removed a specific tech vendor or ANY tech vendor within a specific category, sorted by most recent first        
Need an API key? <a href="https://bloomberry.com/signup.html">Get a free API key here</a> 

# OpenAPI definition

```json
{
  "openapi": "3.0.3",
  "info": {
    "title": "B2B Tech Stack Intelligence API",
    "description": "Comprehensive API for retrieving tech stack changes, active customer lists for a vendor, and hiring signals (job postings)",
    "version": "1.0.0",
    "contact": {
      "url": "https://bloomberry.com"
    }
  },
  "servers": [
    {
      "url": "https://api.revealera.com",
      "description": "Production server"
    }
  ],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "paths": {
    "/signals/tech.json": {
      "get": {
        "summary": "Get recent tech stack changes",
        "description": "Returns companies that added or removed a specific tech vendor or ANY tech vendor within a specific category, sorted by most recent first        \nNeed an API key? <a href=\"https://bloomberry.com/signup.html\">Get a free API key here</a> ",
        "tags": [
          "Tech Stack Changes"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "next_token",
            "in": "query",
            "description": "Pagination token from previous response (located in \"pagination\" > \"next_token\") to fetch the next page. Leave blank for the first page",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Signals per page",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 20,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "begin_date",
            "in": "query",
            "description": "Start date. Defaults to the first date in our dataset.  ",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date",
              "example": "2025-08-15"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "description": "End date. Defaults to end of today.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date",
              "example": "2025-09-15"
            }
          },
          {
            "name": "category",
            "in": "query",
            "description": "The product category to get tech stack changes for. All possible product categories are available at https://api.revealera.com/categories.txt. Pass \"all\" to get changes for all categories. Note: ONLY 1 of category OR vendor_name MUST be specified, but no more than 1.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "human capital management"
            }
          },
          {
            "name": "vendor_name",
            "in": "query",
            "description": "The vendor_name to get tech stack changes for. For example, 'Google Workspace' to get tech stack changes for Google Workspace. Note: ONLY 1 of category OR vendor_name MUST be specified, but no more than 1. All possible vendor names can be found here: https://api.revealera.com/vendors.txt",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Google Workspace"
            }
          },
          {
            "name": "domain",
            "in": "query",
            "description": "The domain of the company to get tech stack changes for. if this is specified, vendor_name and category are both ignored.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "unifygtm.com"
            }
          },
          {
            "name": "churn_only",
            "in": "query",
            "description": "true if you want to see churn changes only. false if you want to see all changes, including churn",
            "required": false,
            "schema": {
              "type": "string",
              "default": false
            }
          },
          {
            "name": "new_only",
            "in": "query",
            "description": "true if you want to see new installs or new usage changes only. false otherwise",
            "required": false,
            "schema": {
              "type": "string",
              "default": false
            }
          },
          {
            "name": "company_employee_size_range",
            "in": "query",
            "description": "Only show tech stack changes from companies with number of employees that match the specified size ranges. Possible ranges are 1 employee, 2-10, 11-50, 51-200, 201-500, 501-1,000, 1,001-5,000, 5,001-10,000, 10,001+. Separate multiple values with semicolon.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "2-10;11-50"
            }
          },
          {
            "name": "company_industry",
            "in": "query",
            "description": "Only show tech stack changes from companies in the specified industries. We look at the LinkedIn company page to determine industries. All possible industries are available at https://api.revealera.com/linkedin_industries.txt . Separate multiple values with semicolon.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "Software Development;IT Services and IT Consulting"
            }
          },
          {
            "name": "company_country",
            "in": "query",
            "description": "Only show tech stack changes from companies headquartered in the specified countries. Country codes must be in ISO 3166-1 alpha-2 format. Separate multiple values with semicolon.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "US;GB",
              "pattern": "^[A-Z]{2}(;[A-Z]{2})*$"
            }
          },
          {
            "name": "company_region",
            "in": "query",
            "description": "Only show tech stack changes from companies headquartered in the specified regions. Possible values include: Africa, Asia, Europe, North America, Oceania, South America. Separate multiple values with semicolon.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "North America;Europe",
              "pattern": "^[A-Z]{2}(;[A-Z]{2})*$"
            }
          },
          {
            "name": "omit_linkedin_data",
            "in": "query",
            "description": "true if you to omit linkedin-related fields from the response (ie for compliance reasons)",
            "required": false,
            "schema": {
              "type": "string",
              "default": false
            }
          },
          {
            "name": "exclude_domains",
            "in": "query",
            "description": "Exclude tech stack changes from companies with the domains passed in Separate multiple values with semicolon.",
            "required": false,
            "schema": {
              "type": "string",
              "example": "logitech.com;starbucks.com"
            }
          },
          {
            "name": "omit_churned",
            "in": "query",
            "description": "Exclude tech stack changes from companies that are no longer users/customers of that product/vendor",
            "required": false,
            "schema": {
              "type": "string",
              "default": false
            }
          },
          {
            "name": "omit_current_customers",
            "in": "query",
            "description": "Exclude tech stack changes from companies that are currently customers of that product/vendor",
            "required": false,
            "schema": {
              "type": "string",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TechSignalsResponse"
                },
                "example": {
                  "signals": [
                    {
                      "id": "4433764",
                      "change_date": "2025-06-06T19:59:44-04:00",
                      "change_type": "subscribed",
                      "change_description": "Rodriguez Strategies subscribed to an account payable and receivable automation platform",
                      "linkedin_username": "rodriguezstrategies",
                      "linkedin_company_id": "9412744",
                      "domain": "rodriguezstrategies.com",
                      "company_name": "Rodriguez Strategies",
                      "company_logo": "https://media.licdn.com/dms/image/v2/C560BAQGW4JcKeWR7gA/company-logo_200_200/company-logo_200_200/0/1630638468536/rodriguezstrategies_logo?e=2147483647&v=beta&t=1m_sqXB68840sPORZ_oXeyx1jVTYdM1YxPTqlVFeaTo",
                      "company_address": null,
                      "industry": "Government Relations",
                      "company_size_range": "2-10",
                      "company_description": "Significant public policy is shaped at the local level and then spreads outward. At Rodriguez Strategies, our team navigates the political culture of any city, county, or region. We are a boutique public affairs firm where clients receive tailor-made blueprints designed to address their specific challenges. We pride ourselves on the ability to create unique and targeted plans designed for success. Our experienced leadership team is intimately involved in every engagement from start to finish and can quickly and effectively deploy resources to achieve the policy and advocacy goals of our clients.\n\nWe work with clients across the business, political, and nonprofit sectors to drive THEIR agenda. Absorbing complicated policy materials and seeking solutions is our specialty, and we immerse ourselves in the issue at hand. We use a unique combination of research, coalition building, and local outreach to mobilize stakeholders around our clients' goals.",
                      "country": "US",
                      "vendor_name": null,
                      "vendor_category": "account payable and receivable automation",
                      "vendor_market": "SMB",
                      "vendor_notes": "vendor management",
                      "vendor_market_leader": true,
                      "vendor_url": null,
                      "vendor_source": "link found",
                      "plan_name": null
                    },
                    {
                      "id": "4433763",
                      "change_date": "2025-06-06T19:59:32-04:00",
                      "change_type": "usage",
                      "change_description": "Pure World™ installed LoyaltyLion on their website",
                      "linkedin_username": null,
                      "linkedin_company_id": null,
                      "domain": "pureworldshop.com",
                      "company_name": "Pure World™",
                      "company_logo": "https://cdn.shopify.com/s/files/1/1949/0713/files/wrappedtext7-04_705b40fb-deae-4f9e-940a-0a928c8050b4.png?v=1632253039",
                      "company_address": null,
                      "industry": "Retail",
                      "company_size_range": "2-10",
                      "company_size_range_estimated": "false",
                      "company_description": "Pure World is a designer of sustainable adventure gear; namely hemp backpacks and bags which are hand-crafted in Nepal.",
                      "country": "US",
                      "vendor_name": "LoyaltyLion",
                      "vendor_category": "loyalty management",
                      "vendor_market": "Shopify",
                      "vendor_notes": "",
                      "vendor_market_leader": true,
                      "vendor_url": "loyaltylion.com",
                      "vendor_source": "website javascript",
                      "plan_name": null
                    }
                  ],
                  "pagination": {
                    "page": 1,
                    "per_page": 2,
                    "total_pages": 26721,
                    "total_items": 53442,
                    "next_token": "2q4fasdfasdfdsa"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation errors",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "query",
        "name": "api_key",
        "description": "API key for authentication"
      }
    },
    "schemas": {
      "TechSignalsResponse": {
        "type": "object",
        "properties": {
          "signals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TechSignal"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "required": [
          "signals",
          "pagination"
        ]
      },
      "TechSignal": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Signal ID"
          },
          "change_date": {
            "type": "string",
            "format": "date-time",
            "description": "Date when the tech change occurred (ISO 8601 format with timezone)"
          },
          "change_type": {
            "type": "string",
            "enum": [
              "subscribed",
              "unsubscribed",
              "usage",
              "stop_usage",
              "upgrade",
              "downgrade"
            ],
            "description": "Type of change"
          },
          "change_description": {
            "type": "string",
            "description": "A description of the tech change"
          },
          "linkedin_username": {
            "type": "string",
            "nullable": true,
            "description": "LinkedIn username of the company"
          },
          "linkedin_company_id": {
            "type": "string",
            "nullable": true,
            "description": "LinkedIn company id of the company"
          },
          "domain": {
            "type": "string",
            "description": "Company domain/website of the company"
          },
          "company_name": {
            "type": "string",
            "description": "Name of the company"
          },
          "company_logo": {
            "type": "string",
            "format": "uri",
            "description": "URL to company logo"
          },
          "company_address": {
            "type": "string",
            "nullable": true,
            "description": "Company address, if found"
          },
          "industry": {
            "type": "string",
            "description": "Company industry of the company"
          },
          "company_size_range": {
            "type": "string",
            "description": "Company size range"
          },
          "company_size_range_estimated": {
            "type": "boolean",
            "description": "true if the company_size_range was estimated by us, or false if it was taken directly from their Linkedin company profile"
          },
          "company_description": {
            "type": "string",
            "description": "Company description"
          },
          "country": {
            "type": "string",
            "description": "Company HQ country"
          },
          "region": {
            "type": "string",
            "description": "Company HQ region"
          },
          "vendor_name": {
            "type": "string",
            "nullable": true,
            "description": "Name of the technology vendor"
          },
          "vendor_category": {
            "type": "string",
            "description": "Category of the vendor/technology"
          },
          "vendor_market": {
            "type": "string",
            "enum": [
              "SMB",
              "Shopify",
              "Mid-Market",
              "Enterprise"
            ],
            "description": "Market segment of the vendor"
          },
          "vendor_notes": {
            "type": "string",
            "description": "Additional notes about the vendor such as its unique features/topics"
          },
          "vendor_market_leader": {
            "type": "boolean",
            "description": "Whether vendor is a market leader"
          },
          "vendor_url": {
            "type": "string",
            "format": "uri",
            "nullable": true,
            "description": "URL to vendor website"
          },
          "vendor_source": {
            "type": "string",
            "enum": [
              "dns record",
              "website javsacript",
              "link found",
              "internal subdomain"
            ],
            "description": "Source where we found the signal"
          },
          "plan_name": {
            "type": "string",
            "nullable": true,
            "description": "the name of the product plan this customer changed to (most of the time it is null, but if we know it, it is indicated here)"
          },
          "context_url": {
            "type": "string",
            "nullable": true,
            "description": "the url where we detected the change (if a link or internal subdomain was the source)"
          }
        },
        "required": [
          "id",
          "change_date",
          "change_type",
          "change_description",
          "domain",
          "company_name",
          "industry",
          "company_size_range",
          "country",
          "vendor_category",
          "vendor_market",
          "vendor_market_leader",
          "vendor_source"
        ]
      },
      "Pagination": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "Current page number"
          },
          "per_page": {
            "type": "integer",
            "description": "Number of items per page"
          },
          "total_pages": {
            "type": "integer",
            "description": "Total number of pages"
          },
          "total_items": {
            "type": "integer",
            "description": "Total number of items"
          }
        },
        "required": [
          "page",
          "per_page",
          "total_pages",
          "total_items"
        ]
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "description": "Error message"
          },
          "code": {
            "type": "integer",
            "description": "Error code"
          }
        }
      },
      "ValidationErrorResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Validation error messages grouped by field"
          },
          "message": {
            "type": "string",
            "description": "General error message"
          }
        }
      }
    }
  }
}
```