Texas Pharmacy License Scraper - TSBP Daily Data
Pricing
from $1.50 / 1,000 results
Texas Pharmacy License Scraper - TSBP Daily Data
Extract pharmacist, pharmacy, intern & technician license records from Texas State Board of Pharmacy (TSBP). Daily-updated CSV data with license status, expiration, disciplinary actions & location.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Texas Pharmacy License Scraper — TSBP Data Extractor for Pharmacists, Pharmacies, Interns & Technicians
The most complete Texas State Board of Pharmacy (TSBP) data extraction tool on Apify. Download daily-updated license records for every pharmacist, pharmacy, intern, and technician registered in Texas — structured, filtered, and ready for compliance, sales, recruiting, credentialing, and analytics workflows.
What This Actor Does
The Texas Pharmacy License Scraper is a production-ready Apify Actor that extracts the complete public licensing database from the Texas State Board of Pharmacy (TSBP) — the state regulator that licenses every pharmacist, pharmacy facility, pharmacy intern, and pharmacy technician practicing in Texas.
In a single run (typically 30–60 seconds), the actor returns 100,000+ structured records covering:
- 🧑⚕️ Pharmacists — every individual pharmacist licensed to practice in Texas
- 🏥 Pharmacies — every licensed pharmacy facility (community, hospital, mail-order, nuclear, sterile compounding, central fill, and more)
- 📚 Interns — every registered pharmacy intern (pharmacy students completing supervised practice hours)
- ⚙️ Technicians — every registered pharmacy technician
Each record includes license number, status, issue and expiration dates, full mailing address, disciplinary action flag, and source metadata — making this the fastest way to populate or refresh a Texas pharmacy dataset for compliance, sales, credentialing, or research use cases.
Why scrape TSBP yourself when this exists?
TSBP publishes the raw data as four separate CSV files updated every business day. Most teams discover this and immediately hit the same pain points:
- ❌ CSV headers change without notice (TSBP has reformatted fields multiple times since 2020)
- ❌ Inconsistent column counts across files require per-file parsing logic
- ❌ Mixed-case status values (
ActivevsACTIVEvsactive) break naive filters - ❌ Address fields combine street, city, state and ZIP in non-standard ways
- ❌ Disciplinary action flags appear in different columns per file
- ❌ No incremental update API — you must redownload everything every time
- ❌ Manual cron + S3 + parsing pipeline is 4–8 hours of one-off dev work that nobody wants to maintain
This actor solves all of that: it downloads, normalizes, deduplicates, filters, and outputs ready-to-use JSON — no parsing scripts, no schema babysitting, no Python pandas glue code.
Quick Start
One-Click Run
- Click "Try for free" on the Apify Store page
- Leave inputs at default to scrape all four license types
- Hit Start — your dataset is ready in under a minute
- Download as JSON, CSV, Excel, or HTML directly from the Apify dataset view
API Run (Python)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("haketa/tsbp-license-scraper").call(run_input={"licenseTypes": ["pharmacist", "pharmacy"],"statusFilter": "active_only","cities": ["Houston", "Dallas", "Austin"]})for record in client.dataset(run["defaultDatasetId"]).iterate_items():print(record["licenseNumber"], record["lastName"], record["city"])
API Run (Node.js / TypeScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/tsbp-license-scraper').call({licenseTypes: ['pharmacy'],statusFilter: 'active_only',cities: ['Houston']});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} active Houston pharmacies`);
API Run (cURL)
curl -X POST "https://api.apify.com/v2/acts/haketa~tsbp-license-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"licenseTypes":["pharmacist"],"statusFilter":"active_only"}'
How It Works
TSBP publishes four CSV downloads on its public website — refreshed every business day around 6:00 AM Central Time. This actor downloads all four directly (no browser, no login, no API key), parses each with category-specific logic, applies your filters, and pushes structured JSON records to the Apify dataset.
| Source File | URL | Records | Updated |
|---|---|---|---|
phtdsk.csv | pharmacy.texas.gov/downloads/phtdsk.csv | ~30,000 individual pharmacists | Daily |
phydsk.csv | pharmacy.texas.gov/downloads/phydsk.csv | ~7,500 pharmacy facilities | Daily |
intdsk.csv | pharmacy.texas.gov/downloads/intdsk.csv | ~5,000 pharmacy interns | Daily |
techdsk.csv | pharmacy.texas.gov/downloads/techdsk.csv | ~60,000 pharmacy technicians | Daily |
Engineering details
- Direct HTTPS GET — no headless browser, no Puppeteer, no Playwright
- Streaming CSV parser — handles 100MB+ files without loading the entire file into memory
- Schema normalization — column-name fuzzy matching survives TSBP's occasional header reformats
- Status normalization — every status string lowercased and mapped to canonical values
- Address parsing — splits raw address strings into street, city, state, ZIP components
- Disciplinary inference — checks status codes AND dedicated disciplinary columns
- Deterministic output — same input always produces the same dataset shape
Input Parameters
{"licenseTypes": ["pharmacist", "pharmacy", "intern", "technician"],"statusFilter": "all","cities": [],"states": [],"disciplinaryFilter": "all","maxRecords": 0}
Parameter reference
| Parameter | Type | Default | Description |
|---|---|---|---|
licenseTypes | array<string> | all four | Categories to scrape: pharmacist, pharmacy, intern, technician. Choose one or any combination. |
statusFilter | string | all | all returns every record. active_only returns only currently practicing licensees. inactive_only returns suspended, revoked, surrendered, cancelled, expired, and closed records. |
cities | array<string> | [] | Case-insensitive city filter. Example: ["Houston", "Dallas", "San Antonio"]. Empty array = no city filter. |
states | array<string> | [] | State abbreviation filter — useful because mail-order pharmacy facilities licensed in Texas may be physically located out of state. Example: ["TX"]. Empty = no state filter. |
disciplinaryFilter | string | all | all ignores discipline. clean_only returns only records with no disciplinary action. disciplined_only returns only records with Board action on file. |
maxRecords | integer | 0 | Cap total output. 0 means unlimited. Useful for testing or sampling. |
proxyConfiguration | object | none | Optional Apify proxy settings. Rarely needed — TSBP does not rate-limit public CSV downloads. |
Output Schema
Every record — regardless of license category — uses the same flat JSON schema so downstream consumers (databases, CRMs, analytics tools) can ingest the entire dataset without per-category branching.
Common fields (all categories)
| Field | Type | Always Present | Description |
|---|---|---|---|
licenseCategory | string | ✅ | One of Pharmacist, Pharmacy, Intern, Technician |
licenseNumber | string | ✅ | TSBP-issued license or registration number |
licenseStatus | string | ✅ | Normalized status — see status reference below |
issueDate | string | ✅ | Original license issue date in YYYY-MM-DD format |
expirationDate | string | ✅ | Current expiration date in YYYY-MM-DD format |
address | string | usually | Street address as reported to TSBP |
city | string | usually | City |
state | string | usually | Two-letter US state abbreviation |
zip | string | usually | ZIP code (5 or 9 digits) |
disciplinaryAction | boolean | ✅ | true if Board disciplinary action exists |
sourceFile | string | ✅ | CSV filename this record came from |
scrapedAt | string | ✅ | ISO-8601 timestamp of extraction |
Individual-only fields (Pharmacist, Intern, Technician)
| Field | Description |
|---|---|
firstName | Given name |
middleName | Middle name or initial |
lastName | Family name |
Facility-only fields (Pharmacy)
| Field | Description |
|---|---|
pharmacyName | DBA / facility name (e.g., WALGREENS #5432) |
pharmacyType | Community, Hospital, Mail Order, Nuclear, Sterile Compounding, Non-Sterile Compounding, Central Fill, Class A/B/C/D/E/F |
phone | Facility phone number |
pharmacistInCharge | Responsible PIC pharmacist name |
Example: Pharmacist record
{"licenseCategory": "Pharmacist","licenseNumber": "45123","lastName": "MARTINEZ","firstName": "CARLOS","middleName": "A","pharmacyName": null,"pharmacyType": null,"licenseStatus": "Active","issueDate": "2016-08-15","expirationDate": "2027-03-31","address": "1234 MAIN ST","city": "Houston","state": "TX","zip": "77001","phone": null,"pharmacistInCharge": null,"disciplinaryAction": false,"sourceFile": "phtdsk.csv","scrapedAt": "2026-05-06T09:00:00.000Z"}
Example: Pharmacy facility record
{"licenseCategory": "Pharmacy","licenseNumber": "18765","lastName": null,"firstName": null,"middleName": null,"pharmacyName": "WALGREENS #5432","pharmacyType": "Community","licenseStatus": "Active","issueDate": "2005-01-10","expirationDate": "2027-01-31","address": "9876 WESTHEIMER RD","city": "Houston","state": "TX","zip": "77042","phone": "713-555-0100","pharmacistInCharge": "SMITH, JANE R","disciplinaryAction": false,"sourceFile": "phydsk.csv","scrapedAt": "2026-05-06T09:00:00.000Z"}
License Status Reference
✅ Active statuses — may legally practice or operate
| Status | Meaning |
|---|---|
Active | License current and in good standing |
Probation | Active but subject to Board-imposed conditions |
Restricted | Limited scope of practice — contact TSBP for details |
🚫 Inactive statuses — may NOT practice or operate
| Status | Meaning |
|---|---|
Suspended | Temporarily barred from practice |
Revoked | Permanently terminated by Board action |
Cancelled | License cancelled |
Surrender | Voluntarily surrendered (often pre-disciplinary) |
Retired | Retired status — no longer practicing |
Expired | Failed to renew by deadline |
Closed | Pharmacy facility closed (facility records only) |
Tip: Use
statusFilter: "active_only"to receive only the first group,inactive_onlyfor the second, orallfor both.
Use Cases
🏥 Healthcare Staffing & Travel Pharmacy
Travel pharmacy and locum agencies use this dataset to:
- Verify Texas licenses before placing pharmacists on assignment
- Source candidates by city — get every active pharmacist in Houston, Dallas, Austin, or any Texas metro
- Monitor expirations with daily-refreshed expiration dates so credentials never lapse mid-assignment
- Filter out disciplinary issues automatically using the
clean_onlydisciplinary filter
✅ Compliance & Credentialing Automation
Pharmacy chains, hospital systems, and PBMs use TSBP data to:
- Automate monthly license verification for every pharmacist on payroll
- Catch status changes within 24 hours —
Active→Suspendedtriggers immediate review - Maintain audit-ready logs with timestamped
scrapedAtfields proving when verification ran - Replace expensive third-party verification subscriptions that charge per-lookup fees
- Document due diligence for Joint Commission, URAC, and state inspector audits
💼 B2B Sales & Lead Generation
Pharmaceutical reps, medical device vendors, pharmacy software companies, and POS providers use the dataset to:
- Build targeted Texas pharmacy lead lists filtered by city, type, or facility size
- Identify net-new pharmacy openings by diffing this week's run against last week's
- Route territory assignments based on pharmacy density per ZIP or metro area
- Enrich CRM records (Salesforce, HubSpot, Pipedrive) with current license status
- Power direct mail campaigns with verified, current pharmacy mailing addresses
📈 Workforce & Market Research
Academic researchers, healthcare policy analysts, and management consultants use TSBP data to:
- Map pharmacist supply and demand across rural vs. urban Texas
- Track demographic trends in license issuance over time
- Analyze pharmacy type evolution (e.g., growth of mail-order vs. community pharmacy)
- Quantify Board disciplinary patterns — what percentage of pharmacists face action annually?
- Benchmark technician-to-pharmacist ratios across metropolitan statistical areas
🏛️ Legal, Litigation & Due Diligence
Attorneys, M&A advisors, and investigators use the dataset to:
- Verify pharmacist credentials in malpractice or licensing disputes
- Build chronologies of an individual pharmacist's license history (when combined with archived runs)
- Conduct pre-acquisition due diligence on pharmacy chain acquisitions
- Identify all PICs (Pharmacist-in-Charge) at a facility for litigation discovery
- Validate expert witness credentials before engagement
🛡️ Insurance Underwriting
Insurers writing pharmacist professional liability or pharmacy facility policies use this data to:
- Verify license validity at policy bind and renewal
- Adjust pricing for disciplinary history automatically
- Monitor portfolio risk — flag insureds whose status changes mid-policy
- Process claims faster with pre-verified licensee information
🏘️ Real Estate & Location Intelligence
Commercial real estate teams and retail site selection analysts use pharmacy density as a proxy for neighborhood healthcare access:
- Identify pharmacy deserts — ZIP codes with low pharmacist-per-capita ratios
- Evaluate retail site competition before opening a new pharmacy
- Support healthcare facility planning with current pharmacy distribution
- Inform investor pitch decks with hard demographic data
📊 Government & Public Health Research
State health departments, academic public health programs, and journalists use TSBP data to:
- Study healthcare workforce shortages by region
- Investigate pharmacy access disparities along racial, economic, or geographic lines
- Cover regulatory enforcement — disciplinary trends, board action patterns
- Inform health policy proposals with current empirical data
🎓 Academic & Career Research
Pharmacy schools, career counselors, and CE providers use TSBP data to:
- Identify graduating intern pipelines by year and metro
- Target CE marketing to active Texas pharmacists by license expiration date
- Build alumni outreach lists for fundraising and engagement
- Track program graduate outcomes longitudinally
Sample Queries & Recipes
Recipe 1: All active pharmacies in Houston with current PIC
{"licenseTypes": ["pharmacy"],"statusFilter": "active_only","cities": ["Houston"]}
Recipe 2: Every disciplined pharmacist statewide (for compliance dashboards)
{"licenseTypes": ["pharmacist"],"statusFilter": "all","disciplinaryFilter": "disciplined_only"}
Recipe 3: All licensees expiring in the next 90 days (post-filter in your stack)
{"licenseTypes": ["pharmacist", "technician"],"statusFilter": "active_only"}
Then filter downstream:
from datetime import date, timedeltacutoff = (date.today() + timedelta(days=90)).isoformat()expiring_soon = [r for r in records if r["expirationDate"] <= cutoff]
Recipe 4: Build a 4-city sales territory file
{"licenseTypes": ["pharmacy"],"statusFilter": "active_only","cities": ["Houston", "Dallas", "Austin", "San Antonio"]}
Recipe 5: Test run — sample 50 records before committing to a full scrape
{"licenseTypes": ["pharmacist"],"maxRecords": 50}
Recipe 6: Texas-only pharmacy facilities (exclude out-of-state mail-order)
{"licenseTypes": ["pharmacy"],"statusFilter": "active_only","states": ["TX"]}
Integration Examples
Google Sheets (via Apify Integration)
- Set up an Apify schedule running this actor daily at 8:00 AM Central
- Add the "Export to Google Sheets" integration to the schedule
- Receive a fresh Texas pharmacy CSV in your Sheet every morning
Make.com / Zapier / n8n
Use the Apify connector on any major automation platform. Trigger downstream workflows on:
- New records (latest run minus previous run)
- Status changes (
Active→Suspended) - Address changes (pharmacy relocations)
- New disciplinary actions
Power BI / Tableau / Looker
Connect Apify's REST API as a data source. Refresh on Apify schedule. Build dashboards covering:
- Active pharmacist count by metro
- Disciplinary action rates by year
- Pharmacy facility growth by type
- Geographic heat maps of pharmacy density
Postgres / Snowflake / BigQuery
Use the Apify webhook integration to POST run results directly to your data warehouse ingestion endpoint after every scheduled run.
Salesforce / HubSpot CRM Enrichment
Trigger an Apify run nightly, then upsert against Account records keyed on license number. Status change events can create Tasks or open Cases automatically.
Major Texas Markets at a Glance
| Metro Area | Population | Healthcare Significance |
|---|---|---|
| Houston | 7.1M | Texas Medical Center — world's largest medical complex; ~1,500 pharmacies |
| Dallas–Fort Worth | 7.6M | Baylor Scott & White, UT Southwestern, HCA networks |
| San Antonio | 2.6M | Military medical hub (BAMC, Brooke Army Medical Center) |
| Austin | 2.3M | Fastest-growing major metro, expanding pharmacy networks |
| Fort Worth | 1.0M | Cook Children's, JPS Health Network, independent pharmacies |
| El Paso | 0.9M | Border healthcare, bilingual pharmacy workforce |
| Corpus Christi | 0.5M | Coastal Bend healthcare hub |
| Lubbock | 0.3M | West Texas medical center, Texas Tech HSC |
| Amarillo | 0.3M | Texas Panhandle healthcare anchor |
| McAllen | 0.9M | Rio Grande Valley pharmacy network |
Cost & Performance
| Metric | Value |
|---|---|
| Engine | Direct CSV download — no browser overhead |
| Runtime (all four files, unfiltered) | 30–60 seconds |
| Runtime (single category) | 5–15 seconds |
| Cost per full run | ~0.001 Compute Units (typically less than $0.01) |
| Pricing model | Pay-per-event (transparent per-record pricing) |
| Data freshness | Daily — previous business day |
| Auth required | None |
| Proxy required | None |
| Concurrency | Safe to run multiple parallel filtered configurations |
| Memory footprint | 256 MB sufficient for full unfiltered run |
Compliance, Privacy & Legal Notes
- Public data only — every field in this dataset is published by TSBP at pharmacy.texas.gov under the Texas Public Information Act
- No PHI — the dataset contains no patient health information
- No SSNs, DOBs, or financial data — only license-related public information
- Address data is the business/practice address on file with TSBP — not personal residence (in most cases)
- HIPAA does not apply — this is licensing data, not patient data
- No emails are included; TSBP does not publish licensee email addresses
- Compliance with CAN-SPAM, TCPA, GDPR/CCPA is the responsibility of the data consumer
Important: TSBP data may not be used for unlawful purposes including but not limited to identity fraud, stalking, or harassment. Read TSBP's Open Records policy for full guidance.
Frequently Asked Questions
How fresh is the data?
TSBP refreshes the public CSV files every business day, typically by 6:00 AM Central Time. The actor downloads the latest version on each run, so data is at most one business day old.
How many records will I get?
Approximately 100,000+ total records across all four files: ~30,000 pharmacists, ~7,500 pharmacy facilities, ~5,000 interns, and ~60,000 technicians. Numbers shift slightly with new licenses, expirations, and renewals.
Does this scraper require login or API keys to TSBP?
No. TSBP publishes the CSVs as public downloads with no authentication. You only need an Apify account to run the actor.
Does this work for other states (California, Florida, New York)?
Not this actor — TSBP is Texas-specific. We maintain separate Apify actors for other state licensing boards. See the Related Actors section below for the current catalog.
Can I use this for license verification at scale?
Yes. Many compliance teams run this actor daily, diff against the previous day, and trigger alerts on status changes. Apify schedules make this fully automated.
Are pharmacist or pharmacy emails included?
No. TSBP does not publish licensee email addresses in the public files. Pharmacy phone numbers and mailing addresses are included.
Can I filter by license expiration date or issue date?
The actor returns the dates as fields — apply expiration/issue-date filters in your downstream pipeline (SQL WHERE, Python list comprehension, Sheets filter, etc.).
Does the actor deduplicate?
The TSBP files are already deduplicated by license number — each license appears once. The actor preserves this.
What's the difference between an intern and a technician?
A pharmacy intern is a pharmacy school student gaining supervised practice hours toward licensure as a pharmacist. A pharmacy technician is a non-pharmacist support role registered with TSBP, not on the licensure track.
Is residential or proxy access required?
No. TSBP does not block or rate-limit public CSV downloads. The actor runs without proxies by default.
Is there a historical snapshot version of the data?
Not from TSBP directly. To build a history, schedule this actor daily and archive each dataset run — Apify stores all run datasets indefinitely on most plans.
Can I get pharmacist NPI numbers?
NPI numbers are issued federally (CMS), not by TSBP, so they are not in this dataset. Cross-reference TSBP license numbers with the NPPES NPI Registry for NPI enrichment.
Does this actor work with the Apify Free Plan?
Yes — full functionality on the free tier. A full unfiltered run costs ~0.001 CU.
How do I report a bug or request a feature?
Open an issue on the Apify Store actor page or contact the developer directly through the Apify Console.
Can I run this on a schedule automatically?
Yes — Apify's built-in Scheduler lets you trigger this actor hourly, daily, weekly, or on any cron expression. Combine with webhook or integration outputs for a fully automated pipeline.
What formats can I export the data in?
JSON, CSV, Excel (XLSX), HTML, XML, and RSS — directly from the Apify dataset view. The API also supports JSON Lines for streaming consumers.
Does this dataset include closed pharmacies?
Yes, when you set statusFilter: "all" or statusFilter: "inactive_only", closed facilities are included. Use this for historical analysis or to study pharmacy churn.
How does pay-per-event pricing work?
You're charged a small amount for the actor start and per dataset item delivered. Typical full runs cost under $0.01. There are no monthly minimums — you only pay when you run.
Related Apify Actors by Haketa
If you need licensing data from other US states or related healthcare regulatory bodies, check these additional actors:
- 🇺🇸 Ohio eLicense Scraper — all Ohio professional licenses
- 🇺🇸 Illinois IDFPR License Scraper — Illinois licensed professionals
- 🇺🇸 California DCA License Scraper — California licensing
- 🇺🇸 Virginia DPOR License Scraper — Virginia regulated occupations
- 🇺🇸 Colorado Professional License Scraper — Colorado DORA
- 🇺🇸 Minnesota DLI License Scraper — Minnesota licensing
- 🇺🇸 Washington L&I Contractor License Scraper
- 🇺🇸 Arizona ROC Contractor License Scraper
- 🇺🇸 North Carolina Licensing Board for General Contractors Scraper
- 🇺🇸 TTB Alcohol Permittee Scraper
- 🇺🇸 SAM.gov Federal Contractor Scraper
- 🇺🇸 BBB Business Scraper
Comparison vs. Alternatives
| Approach | Setup time | Data freshness | Cost (10K records) | Schema normalization | Compliance audit log |
|---|---|---|---|---|---|
| This actor | < 1 minute | Daily | < $0.01 | ✅ Built-in | ✅ Automatic |
| Manual CSV download | 5–10 min/day | Daily | Free | ❌ None | ❌ None |
| Custom Python script | 4–8 hours dev | Daily | Free + infra | DIY | DIY |
| Paid verification API | Hours setup | Real-time | $100–500+/mo | ✅ | ✅ |
| TSBP records request | Days | Stale | Variable | ❌ | ❌ |
Why Pay-Per-Event Pricing?
Most data scrapers either charge a flat monthly subscription (you pay even if you don't use it) or per-Compute-Unit (unpredictable). This actor uses pay-per-event pricing, which means:
- ✅ You only pay when the actor runs
- ✅ Charges scale with how much data you actually consume
- ✅ Transparent, line-item billing inside Apify
- ✅ No monthly minimums
- ✅ Free to evaluate — sample with
maxRecords: 50for pennies
Changelog
| Version | Date | Notes |
|---|---|---|
| 1.0.0 | 2026-05-06 | Initial release — direct CSV download, four license categories, full filtering, pay-per-event pricing |
Keywords
Texas Pharmacy License Scraper · TSBP scraper · Texas State Board of Pharmacy data · Texas pharmacist database · Texas pharmacy license lookup · pharmacy.texas.gov scraper · Texas pharmacist verification API · TSBP CSV download · Texas pharmacy compliance · Texas pharmacy lead generation · Texas pharmacy B2B leads · Texas pharmacist directory · Texas pharmacy technician registry · Texas pharmacy intern data · Texas pharmacist credentialing automation · pharmacist license verification Texas · pharmacy disciplinary action lookup Texas · Texas pharmacy data extraction · Apify pharmacy actor · healthcare licensing data Texas · Texas pharmacy chain locations · Houston pharmacy database · Dallas pharmacy database · Austin pharmacy database · San Antonio pharmacy database · Texas mail order pharmacy data · pharmacy facility licensing Texas · pharmacist license number lookup · pharmacy CSV API · TSBP license verification · Texas pharmacy schedule automation · pharmacy compliance monitoring Texas
Support
- 🐛 Bug reports: Use the Issues tab on the Apify Store page
- 💡 Feature requests: Same place, please describe your use case
- 📧 Direct contact: Through the Apify developer profile
If this actor saves you time, a 5-star rating on the Apify Store helps other healthcare and compliance teams discover it. Thank you!