AWS announced that Amazon Pinpoint is reaching end of support on October 30, 2026. New customers have been locked out since May 2025, and existing customers lose console access after the cutoff. But here's the thing that trips people up: not everything is going away.
TL;DR: Pinpoint's campaigns, journeys, segments, and templates are being retired in October 2026. Transactional messaging (SMS, push, voice) continues under AWS End User Messaging. This tutorial walks you through how to identify resources that will be impacted by this deprecation so that you can assess your migration scope across your entire AWS Organization.
Transactional messaging - SMS, push notifications, voice, OTP - all continues under the AWS End User Messaging brand. The engagement and marketing layer is what's being retired: campaigns, journeys, segments, message templates, and the analytics dashboard.
If you're a platform engineer responsible for multiple AWS accounts, the first question isn't "how do we migrate?" It's "what are we actually using?" Some teams adopted Pinpoint years ago and haven't touched it since. Others have active campaigns running across dozens of accounts. The migration effort is wildly different depending on the answer, and you can't get that answer by clicking through the Pinpoint console one project at a time.
This tutorial shows you how to use CloudQuery to sync your Pinpoint resources into SQL, build a visual assessment report in CloudQuery Platform, and run queries that tell you exactly where your exposure is.
What's Being Retired vs. What Stays
Before running any queries, it helps to know which Pinpoint capabilities map to which bucket.
If your team only uses Pinpoint for sending SMS or push notifications, you might not need to migrate anything. The queries below will help you confirm that.
IAM permissions for Pinpoint APIs: mobiletargeting:GetApps, mobiletargeting:GetCampaigns, mobiletargeting:GetSegments, mobiletargeting:ListTemplates, mobiletargeting:GetExportJobs, mobiletargeting:GetImportJobs, mobiletargeting:GetRecommenderConfigurations, mobiletargeting:ListTemplateVersions, and ec2:DescribeRegions (used to determine enabled regions)
If you're using an existing CloudQuery AWS role, you can add these permissions with a policy like:
Step 1: Configure CloudQuery to Sync Pinpoint Tables
Add the Pinpoint tables to your AWS source configuration file. Here's a minimal configuration file that targets the tables you need for this assessment:
aws_pinpoint_template_versions - Version history for each template
aws_pinpoint_export_jobs - Data export job history and status
aws_pinpoint_import_jobs - Data import job history and status
aws_pinpoint_recommender_configurations - ML recommender model integrations
Run the sync to pull your Pinpoint data:
cloudquery sync aws.yml
If you're using CloudQuery Platform, the sync runs automatically on your configured schedule. Once it completes, all your Pinpoint resources are queryable in SQL.
Note: The SQL examples below use ClickHouse syntax, which is what CloudQuery Platform uses. If you're running against PostgreSQL or another destination, you can adapt the queries to your SQL dialect — the table and column names are the same regardless of destination.
Step 2: Build a Pinpoint Migration Assessment Report
CloudQuery Platform's Reports feature lets you turn these assessment queries into a shareable dashboard with charts, tables, and filters. Instead of running queries one at a time, you can build a single report that gives your team a complete picture of your Pinpoint exposure.
To create the report, go to Reports in the CloudQuery Platform, click Create Report, select From Scratch, and paste the full report YAML into the report editor. Here's what the report includes:
Headline metrics at the top use label widgets to show your total Pinpoint projects, active campaigns, segments, and templates at a glance:
widgets: - title: Total Pinpoint Projects display: type: label query: | SELECT count(*) FROM aws_pinpoint_apps WHERE 1=1 AND account_id = '?' - title: Active Campaigns display: type: label query: | SELECT count(*) FROM aws_pinpoint_campaigns AS c JOIN aws_pinpoint_apps AS a ON c.application_id = a.id WHERE c.is_paused = false AND 1=1 AND a.account_id = '?'
A migration complexity pie chart rates each project as High, Medium, or Low based on campaign volume, data pipeline dependencies, and ML recommender usage. This is the widget your team will look at first to understand the overall scope.
Collapsible groups break the assessment into sections — Pinpoint Projects, Active Campaigns, Segments, Templates, Data Pipelines, ML Recommenders, and a final Migration Impact Summary table. Each group contains the relevant charts and detail tables. For example, the Active Campaigns group pairs a bar chart of campaigns by account with a detail table showing which messaging channels each campaign uses (email, SMS, push, custom).
An Account filter at the top lets you drill into specific AWS accounts using a multi-select dropdown that auto-populates from your data.
The report uses the 1=1 AND account_id = '?' filter pattern throughout so that widgets show all data by default, then narrow when you select specific accounts. For more on how report filters work, see the Reports YAML documentation.
Once you've created the report, you can share it with your team, bookmark it, and re-run it as you migrate resources to track progress.
Running Individual Queries
If you prefer to run queries individually — either in the CloudQuery Platform's SQL editor or against your own database — here are the assessment queries broken down by area. These are the same queries used in the report above, so you can use them standalone or adapt them for other SQL dialects.
Find All Pinpoint Projects
Start with the broadest question: where is Pinpoint actually being used?
SELECT account_id, region, name, arn, id FROM aws_pinpoint_apps ORDER BY account_id, region;
If this returns zero rows, congratulations - you're not using Pinpoint and the deprecation doesn't affect you. If it returns results, keep going.
Identify Active Campaigns and Their Channels
Campaigns are the core of Pinpoint's engagement features and the most likely reason you'll need to migrate. This query finds active campaigns and shows what messaging channels they use:
SELECT a.account_id, a.name AS project_name, c.name AS campaign_name, JSONExtractString(c.state, 'CampaignStatus') AS status, multiIf( JSONHas(c.message_configuration, 'EmailMessage'), 'Yes', 'No' ) AS uses_email, multiIf( JSONHas(c.message_configuration, 'SMSMessage'), 'Yes', 'No' ) AS uses_sms, multiIf( JSONHas(c.message_configuration, 'GCMMessage') OR JSONHas(c.message_configuration, 'APNSMessage'), 'Yes', 'No' ) AS uses_push, multiIf( JSONHas(c.message_configuration, 'CustomMessage'), 'Yes', 'No' ) AS uses_custom_channel, c.schedule FROM aws_pinpoint_campaigns AS c JOIN aws_pinpoint_apps AS a ON c.application_id = a.id WHERE c.is_paused = false ORDER BY a.account_id, a.name;
Pay attention to the channel columns. If a campaign uses SMS or push, the messaging part continues under AWS End User Messaging - but the campaign orchestration (scheduling, targeting, A/B testing) still needs to be migrated to Amazon Connect Outbound Campaigns. That distinction matters when you're scoping the work.
Audit Your Segments and Audience Data
Segments define your audiences. They're foundational to how Pinpoint targets messages, and they need to be migrated to Amazon Connect Customer Profiles.
SELECT a.account_id, a.name AS project_name, s.name AS segment_name, s.segment_type, s.import_definition != '{}' AND s.import_definition != '' AS has_import_definition, s.dimensions != '{}' AND s.dimensions != '' AS has_dynamic_filters FROM aws_pinpoint_segments AS s JOIN aws_pinpoint_apps AS a ON s.application_id = a.id ORDER BY a.account_id, a.name;
Two things to look for here. Segments with segment_type = 'IMPORT' or has_import_definition = true mean an external system is pushing audience data into Pinpoint - there's a data pipeline you'll need to redirect. Segments with dynamic filters mean you're using Pinpoint's audience builder, and those filter definitions need to be recreated in Connect.
Check Your Template Investment
Templates represent reusable messaging assets. The more templates you have (and the more versions of each), the more migration work you're looking at.
SELECT t.template_type, COUNT(DISTINCT t.template_name) AS template_count, COUNT(tv.version) AS total_versions FROM aws_pinpoint_templates AS t LEFT JOIN aws_pinpoint_template_versions AS tv ON t.template_name = tv.template_name AND t.template_type = tv.template_type GROUP BY t.template_type ORDER BY template_count DESC;
A high version count means your team has been actively iterating on templates. Amazon Connect uses a similar Handlebars templating engine, but the placeholder syntax changes. AWS has migration guidance for templates that covers the syntax differences - worth reading before you estimate effort.
Look for Data Pipeline Dependencies
Import and export jobs are the integration points teams tend to forget about. An active import job means something is pushing endpoint data into Pinpoint. An active export job means a downstream system is consuming Pinpoint data.
SELECT a.account_id, a.name AS project_name, 'import' AS job_type, ij.job_status AS status, ij.completion_date, ij.total_processed, ij.total_failures, ij.definition FROM aws_pinpoint_import_jobs AS ij JOIN aws_pinpoint_apps AS a ON ij.application_id = a.id
UNION ALL
SELECT a.account_id, a.name AS project_name, 'export' AS job_type, ej.job_status AS status, ej.completion_date, ej.total_processed, ej.total_failures, ej.definition FROM aws_pinpoint_export_jobs AS ej JOIN aws_pinpoint_apps AS a ON ej.application_id = a.id
ORDER BY completion_date DESC;
Recent jobs (completed in the last 30-90 days) indicate active integrations that will break when Pinpoint goes away. These are the dependencies you want to surface early in migration planning, especially since the systems on either end of those pipelines may be owned by different teams.
Check for ML Recommender Configurations
This one is quick but important. Recommender configurations indicate you're using Amazon Personalize or a custom ML model to personalize Pinpoint messages. If present, this is the most complex part of any Pinpoint migration.
SELECT account_id, region, name, recommendation_provider_uri, recommendations_per_message, attributes FROM aws_pinpoint_recommender_configurations;
If this returns results, plan extra time. You'll need to re-integrate those ML models with whatever replaces your Pinpoint campaigns.
Build Your Migration Impact Summary
Now pull it all together into a single view that rates each project's migration complexity:
WITH project_stats AS ( SELECT a.account_id, a.name AS project_name, a.id AS app_id, countIf(c.is_paused = false) AS active_campaigns, COUNT(DISTINCT s.id) AS segment_count, COUNT(DISTINCT ej.id) AS export_jobs, COUNT(DISTINCT ij.id) AS import_jobs FROM aws_pinpoint_apps AS a LEFT JOIN aws_pinpoint_campaigns AS c ON c.application_id = a.id LEFT JOIN aws_pinpoint_segments AS s ON s.application_id = a.id LEFT JOIN aws_pinpoint_export_jobs AS ej ON ej.application_id = a.id LEFT JOIN aws_pinpoint_import_jobs AS ij ON ij.application_id = a.id GROUP BY a.account_id, a.name, a.id ), template_stats AS ( SELECT COUNT(*) AS total_templates FROM aws_pinpoint_templates ), recommender_stats AS ( SELECT COUNT(*) AS total_recommenders FROM aws_pinpoint_recommender_configurations ) SELECT ps.account_id, ps.project_name, ps.active_campaigns, ps.segment_count, ts.total_templates, ps.export_jobs + ps.import_jobs AS data_pipeline_jobs, rs.total_recommenders, multiIf( rs.total_recommenders > 0 OR ps.active_campaigns > 10, 'high', ps.active_campaigns > 0 OR ts.total_templates > 5 OR ps.export_jobs + ps.import_jobs > 0, 'medium', 'low' ) AS migration_complexity FROM project_stats AS ps CROSS JOIN template_stats AS ts CROSS JOIN recommender_stats AS rs ORDER BY multiIf( rs.total_recommenders > 0 OR ps.active_campaigns > 10, 1, ps.active_campaigns > 0 OR ts.total_templates > 5 OR ps.export_jobs + ps.import_jobs > 0, 2, 3 ), ps.account_id;
This gives you a prioritized list you can take to your next planning meeting. Projects rated high have ML integrations or heavy campaign usage and should be the first ones your team investigates. Projects rated medium have active campaigns, templates, or data pipelines that need migrating. Projects rated low may only need minimal cleanup or no action at all.
From Assessment to Action
Once you have your report built — or the output from the individual queries — you know three things: which accounts use Pinpoint, what features they depend on, and how much work each migration represents. That's the foundation for a migration plan.
AWS recommends migrating engagement features to Amazon Connect, email to Amazon SES, and analytics to Amazon Kinesis. One gap worth flagging: Journey support in Amazon Connect is still limited, so if your team relies heavily on multi-step journey workflows, factor that into your timeline.
With CloudQuery Platform, you can share the assessment report with your team and re-run it as migration progresses. As teams decommission campaigns and segments, the numbers in your dashboard will drop, giving everyone a clear, visual measure of how much work remains.
See Your Full AWS Inventory
CloudQuery syncs your AWS resources into SQL so you can query, monitor, and govern your cloud from one place.
Copy and paste this into the CloudQuery Platform report editor to create the full Pinpoint Deprecation Assessment dashboard described in Step 2.
report: title: AWS Pinpoint Deprecation Assessment shortDescription: Assess your migration scope before the October 2026 Pinpoint end-of-support deadline longDescription: | ## What does this report show? This report identifies your AWS Pinpoint usage across all accounts and regions so you can plan your migration before the October 30, 2026 end-of-support deadline.
It covers Pinpoint projects, active campaigns, audience segments, message templates, data pipeline dependencies, and ML recommender integrations — then rates each project's migration complexity as high, medium, or low.
**What's being retired:** Campaigns, journeys, segments, message templates, marketing analytics, and email via Pinpoint.
**What continues:** SMS, MMS, voice, push notifications, OTP, and phone validation continue under AWS End User Messaging. logo: aws tags: - aws - migration - pinpoint - deprecation filters: - type: generic filterLabel: Account filterExpression: account_id = '?' multiple: true query: | SELECT DISTINCT account_id AS value, account_id AS label FROM aws_pinpoint_apps ORDER BY account_id widgets: - title: Total Pinpoint Projects display: type: label query: | SELECT count(*) FROM aws_pinpoint_apps WHERE 1=1 AND account_id = '?' - title: Active Campaigns display: type: label query: | SELECT count(*) FROM aws_pinpoint_campaigns AS c JOIN aws_pinpoint_apps AS a ON c.application_id = a.id WHERE c.is_paused = false AND 1=1 AND a.account_id = '?' - title: Total Segments display: type: label query: | SELECT count(*) FROM aws_pinpoint_segments AS s JOIN aws_pinpoint_apps AS a ON s.application_id = a.id WHERE 1=1 AND a.account_id = '?' - title: Total Templates display: type: label query: | SELECT count(*) FROM aws_pinpoint_templates - title: Migration Complexity by Project display: type: pie_chart total: show: true label: projects query: | WITH project_stats AS ( SELECT a.account_id, a.name AS project_name, a.id AS app_id, countIf(c.is_paused = false) AS active_campaigns, COUNT(DISTINCT s.id) AS segment_count, COUNT(DISTINCT ej.id) AS export_jobs, COUNT(DISTINCT ij.id) AS import_jobs FROM aws_pinpoint_apps AS a LEFT JOIN aws_pinpoint_campaigns AS c ON c.application_id = a.id LEFT JOIN aws_pinpoint_segments AS s ON s.application_id = a.id LEFT JOIN aws_pinpoint_export_jobs AS ej ON ej.application_id = a.id LEFT JOIN aws_pinpoint_import_jobs AS ij ON ij.application_id = a.id WHERE 1=1 AND a.account_id = '?' GROUP BY a.account_id, a.name, a.id ), recommender_stats AS ( SELECT COUNT(*) AS total_recommenders FROM aws_pinpoint_recommender_configurations ) SELECT multiIf( rs.total_recommenders > 0 OR ps.active_campaigns > 10, 'High', ps.active_campaigns > 0 OR ps.segment_count > 5 OR ps.export_jobs + ps.import_jobs > 0, 'Medium', 'Low' ) AS complexity, count(*) AS count FROM project_stats AS ps CROSS JOIN recommender_stats AS rs GROUP BY complexity ORDER BY complexity groups: - title: Pinpoint Projects description: All Pinpoint projects across your AWS accounts widgets: - title: Projects by Account and Region display: type: table width: 100% query: | SELECT account_id, region, name, arn, id FROM aws_pinpoint_apps WHERE 1=1 AND account_id = '?' ORDER BY account_id, region - title: Active Campaigns description: Campaign definitions including messaging channels and scheduling widgets: - title: Campaigns by Account display: type: bar_chart entryLabel: campaigns query: | SELECT a.account_id, count(*) AS campaign_count FROM aws_pinpoint_campaigns AS c JOIN aws_pinpoint_apps AS a ON c.application_id = a.id WHERE c.is_paused = false AND 1=1 AND a.account_id = '?' GROUP BY a.account_id ORDER BY campaign_count DESC - title: Campaign Details display: type: table width: 100% query: | SELECT a.account_id, a.name AS project_name, c.name AS campaign_name, JSONExtractString(c.state, 'CampaignStatus') AS status, multiIf(JSONHas(c.message_configuration, 'EmailMessage'), 'Yes', 'No') AS uses_email, multiIf(JSONHas(c.message_configuration, 'SMSMessage'), 'Yes', 'No') AS uses_sms, multiIf(JSONHas(c.message_configuration, 'GCMMessage') OR JSONHas(c.message_configuration, 'APNSMessage'), 'Yes', 'No') AS uses_push, multiIf(JSONHas(c.message_configuration, 'CustomMessage'), 'Yes', 'No') AS uses_custom_channel FROM aws_pinpoint_campaigns AS c JOIN aws_pinpoint_apps AS a ON c.application_id = a.id WHERE c.is_paused = false AND 1=1 AND a.account_id = '?' ORDER BY a.account_id, a.name - title: Segments & Audience Data description: Audience segments that need migrating to Amazon Connect Customer Profiles widgets: - title: Segments by Type display: type: pie_chart total: show: true label: segments query: | SELECT s.segment_type, count(*) AS count FROM aws_pinpoint_segments AS s JOIN aws_pinpoint_apps AS a ON s.application_id = a.id WHERE 1=1 AND a.account_id = '?' GROUP BY s.segment_type - title: Segment Details display: type: table width: 100% query: | SELECT a.account_id, a.name AS project_name, s.name AS segment_name, s.segment_type, if(s.import_definition != '{}' AND s.import_definition != '', 'Yes', 'No') AS has_import_definition, if(s.dimensions != '{}' AND s.dimensions != '', 'Yes', 'No') AS has_dynamic_filters FROM aws_pinpoint_segments AS s JOIN aws_pinpoint_apps AS a ON s.application_id = a.id WHERE 1=1 AND a.account_id = '?' ORDER BY a.account_id, a.name - title: Message Templates description: Reusable messaging assets that need recreating in Amazon Connect widgets: - title: Templates by Type display: type: bar_chart entryLabel: templates query: | SELECT t.template_type, COUNT(DISTINCT t.template_name) AS template_count FROM aws_pinpoint_templates AS t GROUP BY t.template_type ORDER BY template_count DESC - title: Template Version Counts display: type: table width: 100% query: | SELECT t.template_type, COUNT(DISTINCT t.template_name) AS template_count, COUNT(tv.version) AS total_versions FROM aws_pinpoint_templates AS t LEFT JOIN aws_pinpoint_template_versions AS tv ON t.template_name = tv.template_name AND t.template_type = tv.template_type GROUP BY t.template_type ORDER BY template_count DESC - title: Data Pipelines description: Import and export jobs indicating integration dependencies widgets: - title: Import & Export Jobs display: type: table width: 100% query: | SELECT a.account_id, a.name AS project_name, 'import' AS job_type, ij.job_status AS status, ij.completion_date, ij.total_processed, ij.total_failures FROM aws_pinpoint_import_jobs AS ij JOIN aws_pinpoint_apps AS a ON ij.application_id = a.id WHERE 1=1 AND a.account_id = '?'
UNION ALL
SELECT a.account_id, a.name AS project_name, 'export' AS job_type, ej.job_status AS status, ej.completion_date, ej.total_processed, ej.total_failures FROM aws_pinpoint_export_jobs AS ej JOIN aws_pinpoint_apps AS a ON ej.application_id = a.id WHERE 1=1 AND a.account_id = '?'
ORDER BY completion_date DESC - title: ML Recommender Configurations description: Amazon Personalize or custom ML integrations — the most complex migration items widgets: - title: Recommender Configurations display: type: table width: 100% query: | SELECT account_id, region, name, recommendation_provider_uri, recommendations_per_message FROM aws_pinpoint_recommender_configurations WHERE 1=1 AND account_id = '?' - title: Migration Impact Summary description: Prioritized list rating each project's migration complexity widgets: - title: Migration Summary by Project display: type: table width: 100% query: | WITH project_stats AS ( SELECT a.account_id, a.name AS project_name, a.id AS app_id, countIf(c.is_paused = false) AS active_campaigns, COUNT(DISTINCT s.id) AS segment_count, COUNT(DISTINCT ej.id) AS export_jobs, COUNT(DISTINCT ij.id) AS import_jobs FROM aws_pinpoint_apps AS a LEFT JOIN aws_pinpoint_campaigns AS c ON c.application_id = a.id LEFT JOIN aws_pinpoint_segments AS s ON s.application_id = a.id LEFT JOIN aws_pinpoint_export_jobs AS ej ON ej.application_id = a.id LEFT JOIN aws_pinpoint_import_jobs AS ij ON ij.application_id = a.id WHERE 1=1 AND a.account_id = '?' GROUP BY a.account_id, a.name, a.id ), template_stats AS ( SELECT COUNT(*) AS total_templates FROM aws_pinpoint_templates ), recommender_stats AS ( SELECT COUNT(*) AS total_recommenders FROM aws_pinpoint_recommender_configurations ) SELECT ps.account_id, ps.project_name, ps.active_campaigns, ps.segment_count, ts.total_templates, ps.export_jobs + ps.import_jobs AS data_pipeline_jobs, rs.total_recommenders, multiIf( rs.total_recommenders > 0 OR ps.active_campaigns > 10, 'High', ps.active_campaigns > 0 OR ts.total_templates > 5 OR ps.export_jobs + ps.import_jobs > 0, 'Medium', 'Low' ) AS migration_complexity FROM project_stats AS ps CROSS JOIN template_stats AS ts CROSS JOIN recommender_stats AS rs ORDER BY multiIf( rs.total_recommenders > 0 OR ps.active_campaigns > 10, 1, ps.active_campaigns > 0 OR ts.total_templates > 5 OR ps.export_jobs + ps.import_jobs > 0, 2, 3 ), ps.account_id
FAQ
When is AWS Pinpoint being deprecated?
Amazon Pinpoint reaches end of support on October 30, 2026. After that date, you lose access to the Pinpoint console and all Pinpoint resources. New customers have been blocked since May 20, 2025.
What parts of Pinpoint are NOT being deprecated?
Transactional messaging capabilities continue under AWS End User Messaging: SMS, MMS, voice messaging, push notifications (FCM, APNS), WhatsApp messaging, OTP APIs, and phone number validation. These were rebranded in 2024 and require no migration.
What replaces AWS Pinpoint campaigns and journeys?
Do I need to migrate if I only use Pinpoint for SMS?
If you only use Pinpoint's transactional SMS APIs, those continue as AWS End User Messaging with no migration required. But if you use Pinpoint campaigns to orchestrate SMS sends (scheduling, audience targeting, A/B testing), the campaign layer needs to be migrated even though SMS delivery itself continues.
What CloudQuery tables are available for AWS Pinpoint?
What AWS IAM permissions do I need to query Pinpoint resources?
You need mobiletargeting:GetApps, mobiletargeting:GetCampaigns, mobiletargeting:GetCampaignVersions, mobiletargeting:GetSegments, mobiletargeting:ListTemplates, mobiletargeting:ListTemplateVersions, mobiletargeting:GetExportJobs, mobiletargeting:GetImportJobs, and mobiletargeting:GetRecommenderConfigurations.
Can I run this assessment across multiple AWS accounts?
AWS recommends migrating segments to Amazon Connect Customer Profiles. AWS provides a Python script for converting Pinpoint endpoint data into the Connect Customer Profiles format. Check the official migration guide for details.
Written by
Joe Karlsson
Joe Karlsson (He/They) is an Engineer turned Developer Advocate (and massive nerd). Joe empowers developers to think creatively when building applications, through demos, blogs, videos, or whatever else developers need.
Try CloudQuery yourself
Self-hosted, open source, and free to start. Or schedule a demo to see the managed version.
Download →
Schedule a demo →
Related posts
AWS
Security
Tutorials
Finding AWS Unrestricted Outbound Access in 2026: EC2, Lambda, and Beyond
Find EC2, Lambda, and ECS Fargate resources with unrestricted outbound access in AWS using SQL. Why egress controls still break attack chains in 2026.
Joe Karlsson
May 5, 2026
AWS
Security
Tutorials
AWS IAM Identity Center with Google Workspace as an IdP: 2026 Step-by-Step Guide
Set up AWS IAM Identity Center with Google Workspace: SAML authentication, SCIM user provisioning, and group sync with CLI or ssosync. Updated for 2026.
Joe Karlsson
May 5, 2026
AWS
Cloud Infrastructure
Security
Tutorials
Integrate AbuseIPDB Threat Intelligence with CloudQuery
Enrich your cloud asset inventory with AbuseIPDB threat intelligence to identify public cloud IPs with known abuse reports.
Joe Karlsson
April 20, 2026
AWS
Cloud Infrastructure
Tutorials
How to Query ipinfo.io Data with CloudQuery
Learn how to enrich your cloud asset inventory with ipinfo.io IP geolocation and threat intelligence data using CloudQuery.
Joe Karlsson
April 20, 2026
AWS
Security
Tutorials
AWS IAM Identity Center (Formerly AWS SSO): The Complete 2026 Guide
AWS IAM Identity Center replaced AWS SSO in 2022. Learn how to set it up, configure permission sets, use the AWS CLI, and audit access with CloudQuery.
Joe Karlsson
April 6, 2026
AWS
Best Practices
Tutorials
CloudQuery Sync Performance: A Practical Troubleshooting Guide
Diagnose why CloudQuery syncs slow down after plugin upgrades, identify expensive tables, and use the CLI command that replaces the tables wildcard.
Joe Karlsson
March 6, 2026
AWS
Security
Tutorials
Set Up AWS CLI with SSO (IAM Identity Center) — Step by Step
Set up AWS CLI v2 with IAM Identity Center in 5 minutes. Covers SSO registration scopes, sso-session config, token refresh, and multi-account profiles.
Yevgeny Pats
February 25, 2026
AWS
Cloud Infrastructure
Tutorials
AWS Lambda Python 3.9 End-of-Support: Find and Upgrade Every Affected Function
AWS Lambda Python 3.9 security patches stopped Dec 15, 2025. Find every affected function across all accounts with SQL queries and upgrade to 3.12 or 3.13.
Joe Karlsson
February 10, 2026
AWS
GCP
Security
Tutorials
How to Inventory All Public IP Addresses Across AWS and GCP using CloudQuery
Track every public IP across AWS and GCP in minutes with SQL. Find exposed EC2 instances, unused Elastic IPs, and GCP Compute resources in one place.