Skip to main content
K
Keryx Media
City of Dallas Commercial Registry • Permit #2404241104
Active City of Dallas Commercial Building Permits and Estimator Directory
#
General Contractor
Est. Valuation
Job Site Location
Direct Contact
Open Packages
Action
Daily Dispatch
7:00 AM CST
Bidding Headstart
14–21 Days
FREE PUBLIC BETA 100% FREE ACCESS
General Contractors pull permits weeks before bidding closes. Enter your estimating email below to receive tomorrow's fresh DFW commercial permits daily at 7:00 AM CST with direct decision-maker phone numbers & emails.
⚡ Direct CSV delivery • No credit card required • 1-click unsubscribe anytime
Want tomorrow's Dallas commercial permits sent to your inbox? 100% Free during Beta.
⚡ Daily 7:00 AM CST Feed • Verified Estimating Contacts • 0 Spam
let data = [
{"Permit_Number": "2403111013", "Issue_Date": "04-23-2024", "General_Contractor": "Verticon Construction LLC", "Direct_Phone": "(972) 544-7445", "Estimating_Email": "tom@verticon.us.com", "Project_Value": "$8,000,000", "Job_Site_Address": "8687 N CENTRAL EXPY Ste:514, Dallas, TX 75225", "Scope_Description": "Commercial retail renovation and finish out", "Open_Trades": "Electrical, Drywall", "Building_Type": "Retail Store"},
{"Permit_Number": "2310181034", "Issue_Date": "05-23-2024", "General_Contractor": "Layton Construction", "Direct_Phone": "(404) 615-6145", "Estimating_Email": "jparker@laytonconstruction.com", "Project_Value": "$7,875,000", "Job_Site_Address": "11970 N CENTRAL EXPY, Dallas, TX 75243", "Scope_Description": "Hospital addition and structural expansion", "Open_Trades": "Electrical, Mechanical", "Building_Type": "Hospital"},
{"Permit_Number": "2311061071", "Issue_Date": "07-25-2024", "General_Contractor": "Ridgemont Construction", "Direct_Phone": "(214) 492-8900", "Estimating_Email": "mmcdonnell@ridgemont.com", "Project_Value": "$7,531,400", "Job_Site_Address": "1322 N HAMPTON RD, Dallas, TX 75208", "Scope_Description": "New grocery retail construction", "Open_Trades": "Electrical, Plumbing", "Building_Type": "Retail Store"},
{"Permit_Number": "2401091074", "Issue_Date": "02-19-2024", "General_Contractor": "Austin Commercial LP", "Direct_Phone": "(214) 443-5700", "Estimating_Email": "monicas@austin-ind.com", "Project_Value": "$7,200,000", "Job_Site_Address": "1441 N BECKLEY AVE Ste:FL3, Dallas, TX 75208", "Scope_Description": "Hospital renovation and floor 3 upgrade", "Open_Trades": "Electrical, Mechanical", "Building_Type": "Hospital"},
{"Permit_Number": "2407121074", "Issue_Date": "07-12-2024", "General_Contractor": "Weis Builders Inc", "Direct_Phone": "(469) 464-3333", "Estimating_Email": "derekdammen@weisbuilders.com", "Project_Value": "$7,109,080", "Job_Site_Address": "4777 N CENTRAL EXPY, Dallas, TX 75205", "Scope_Description": "Multi-family residential commercial construction", "Open_Trades": "Drywall, Electrical", "Building_Type": "Multi-Family Dwelling"},
{"Permit_Number": "2402141141", "Issue_Date": "05-21-2024", "General_Contractor": "North American Commercial Construction LP", "Direct_Phone": "(972) 620-9975", "Estimating_Email": "lynn@naccolp.com", "Project_Value": "$7,000,000", "Job_Site_Address": "17727 DALLAS PKWY Ste:150, Dallas, TX", "Scope_Description": "Healthcare facility renovation suite 150", "Open_Trades": "Electrical, Mechanical", "Building_Type": "Hospital"},
{"Permit_Number": "2403191141", "Issue_Date": "03-19-2024", "General_Contractor": "Novel Builders, LLC", "Direct_Phone": "(214) 884-8810", "Estimating_Email": "losborn@novelbuilders.com", "Project_Value": "$6,801,742", "Job_Site_Address": "11110 MIDWAY RD, Dallas, TX 75229", "Scope_Description": "New school educational facility", "Open_Trades": "Drywall, Painting", "Building_Type": "Educational Facility"},
{"Permit_Number": "2310041078", "Issue_Date": "10-06-2023", "General_Contractor": "Archer Western Construction LLC", "Direct_Phone": "(817) 640-3898", "Estimating_Email": "kypotts@walshgroup.com", "Project_Value": "$6,500,000", "Job_Site_Address": "7211 FRANKFORD RD, Dallas, TX", "Scope_Description": "Water treatment facility mechanical systems", "Open_Trades": "Plumbing, Mechanical", "Building_Type": "Industrial Facility"},
{"Permit_Number": "2403181149", "Issue_Date": "04-26-2024", "General_Contractor": "Core Construction Services of Texas Inc", "Direct_Phone": "(972) 668-9340", "Estimating_Email": "garyfrazier@coreconstruction.com", "Project_Value": "$6,300,000", "Job_Site_Address": "8700 STULTS RD, Dallas, TX 75243", "Scope_Description": "Renovation and finish out of educational building", "Open_Trades": "Electrical, HVAC", "Building_Type": "Educational Facility"},
{"Permit_Number": "2310191137", "Issue_Date": "05-01-2024", "General_Contractor": "Clune Construction Company, L.P.", "Direct_Phone": "(312) 609-3623", "Estimating_Email": "risk_management@clunegc.com", "Project_Value": "$5,500,000", "Job_Site_Address": "2699 HOWELL ST, Dallas, TX 75201,75204", "Scope_Description": "Commercial office interior remodel", "Open_Trades": "Electrical, Drywall/Framing", "Building_Type": "Corporate Office"}
];
async function loadLiveFeed() {
try {
const resp = await fetch('/api/leads', { cache: 'no-cache' });
if (resp.ok) {
const json = await resp.json();
if (json && Array.isArray(json.leads) && json.leads.length > 0) {
data = json.leads;
filteredItems = [...data];
filterTable();
if (json.total_pipeline_value) {
const pills = document.querySelectorAll('.m-pill-value');
pills.forEach(p => {
if (p.innerText.includes('$')) {
const mVal = (json.total_pipeline_value / 1_000_000).toFixed(1);
p.innerText = `$${mVal}M`;
}
});
}
}
}
} catch (err) {
console.warn('Live daily feed fetch fallback:', err);
}
}
loadLiveFeed();
let currentTrade = 'All';
let currentPage = 1;
let pageSize = 10;
let filteredItems = [...data];
function getInitials(name) {
if (!name) return 'GC';
const parts = name.split(/[\s,-]+/);
if (parts.length >= 2) return (parts[0][0] + parts[1][0]).toUpperCase();
return name.slice(0, 2).toUpperCase();
}
function syncSearch(val) {
const s1 = document.getElementById('searchInput');
const s2 = document.getElementById('inlineSearchInput');
if (s1 && s1.value !== val) s1.value = val;
if (s2 && s2.value !== val) s2.value = val;
currentPage = 1;
filterTable();
}
function filterTrade(trade, btn) {
currentTrade = trade;
currentPage = 1;
document.querySelectorAll('.filter-btn').forEach(b => {
b.classList.remove('active');
const text = b.innerText.toLowerCase();
if (trade === 'All' && text.includes('all')) {
b.classList.add('active');
} else if (trade !== 'All' && text.includes(trade.toLowerCase())) {
b.classList.add('active');
}
});
filterTable();
}
function filterTable() {
const q = ((document.getElementById('searchInput')?.value) || (document.getElementById('inlineSearchInput')?.value) || '').toLowerCase().trim();
filteredItems = data.filter(r => {
const matchTrade = (currentTrade === 'All') || (r.Open_Trades || '').toLowerCase().includes(currentTrade.toLowerCase());
const matchQuery = !q ||
(r.General_Contractor || '').toLowerCase().includes(q) ||
(r.Job_Site_Address || '').toLowerCase().includes(q) ||
(r.Permit_Number || '').toLowerCase().includes(q) ||
(r.Scope_Description || '').toLowerCase().includes(q) ||
(r.Building_Type || '').toLowerCase().includes(q) ||
(r.Open_Trades || '').toLowerCase().includes(q);
return matchTrade && matchQuery;
});
const totalPages = pageSize === 'all' ? 1 : Math.ceil(filteredItems.length / pageSize) || 1;
if (currentPage > totalPages) {
currentPage = 1;
}
renderStandings();
renderPagination();
}
function setPageSize(size, btn) {
pageSize = size === 'all' ? 'all' : parseInt(size, 10);
currentPage = 1;
document.querySelectorAll('.page-size-btn').forEach(b => b.classList.remove('active'));
if (btn) btn.classList.add('active');
renderStandings();
renderPagination();
}
function goToPage(page) {
const totalPages = pageSize === 'all' ? 1 : Math.ceil(filteredItems.length / pageSize) || 1;
if (page < 1 || page > totalPages) return;
currentPage = page;
renderStandings();
renderPagination();
const section = document.getElementById('leads-section');
if (section) {
const rect = section.getBoundingClientRect();
if (rect.top < 0) {
section.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
}
}
function renderStandings() {
const tbody = document.getElementById('standingsBody');
const mobList = document.getElementById('mobileCardsList');
tbody.innerHTML = '';
mobList.innerHTML = '';
const total = filteredItems.length;
if (total === 0) {
tbody.innerHTML = 'No matching commercial projects found. Try adjusting your trade filter or search query. ';
mobList.innerHTML = 'No matching commercial projects found.
';
document.getElementById('standingsCount').innerText = '0 Verified Projects';
return;
}
document.getElementById('standingsCount').innerText = `${total} Verified Projects`;
let itemsToRender = filteredItems;
let startIndex = 0;
if (pageSize !== 'all') {
startIndex = (currentPage - 1) * pageSize;
itemsToRender = filteredItems.slice(startIndex, startIndex + pageSize);
}
itemsToRender.forEach((r, idx) => {
const globalIdx = startIndex + idx + 1;
const initials = getInitials(r.General_Contractor);
const trades = (r.Open_Trades || '').split(',').map(t => `${t.trim()} `).join('');
// Desktop row
const tr = document.createElement('tr');
tr.innerHTML = `
${globalIdx}
${initials}
${r.General_Contractor}
${r.Building_Type || 'Commercial'}
${r.Project_Value || '$0'}
${r.Job_Site_Address}
Permit #${r.Permit_Number}
${trades}
View Scope
`;
tbody.appendChild(tr);
// Mobile touch card
const card = document.createElement('div');
card.className = 'lead-mobile-card';
card.innerHTML = `
📍
${r.Job_Site_Address}
Permit #${r.Permit_Number}
${trades}
View Full Scope & Project Notes
`;
mobList.appendChild(card);
});
}
function renderPagination() {
const total = filteredItems.length;
const startSpan = document.getElementById('pageRangeStart');
const endSpan = document.getElementById('pageRangeEnd');
const totalSpan = document.getElementById('totalItemsCount');
const navBox = document.getElementById('pageNavButtons');
const toolbar = document.getElementById('paginationToolbar');
if (!toolbar || !navBox) return;
if (total === 0) {
toolbar.style.display = 'none';
return;
}
toolbar.style.display = 'flex';
let start = 1;
let end = total;
let totalPages = 1;
if (pageSize !== 'all') {
start = (currentPage - 1) * pageSize + 1;
end = Math.min(currentPage * pageSize, total);
totalPages = Math.ceil(total / pageSize) || 1;
}
if (startSpan) startSpan.innerText = start;
if (endSpan) endSpan.innerText = end;
if (totalSpan) totalSpan.innerText = total;
let navHtml = '';
// Prev button
const prevDisabled = currentPage <= 1 ? 'disabled' : '';
navHtml += `
Prev
`;
if (pageSize === 'all') {
navHtml += `1 `;
} else {
for (let p = 1; p <= totalPages; p++) {
const activeClass = p === currentPage ? 'active' : '';
navHtml += `${p} `;
}
}
// Next button
const nextDisabled = (currentPage >= totalPages || pageSize === 'all') ? 'disabled' : '';
navHtml += `
Next
`;
navBox.innerHTML = navHtml;
}
function focusSearch() {
const input = document.getElementById('searchInput');
if (input) {
input.focus();
input.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
}
function openDetail(permitNumber) {
const item = data.find(p => String(p.Permit_Number) === String(permitNumber));
if (!item) return;
const html = `
${item.General_Contractor}
Permit #${item.Permit_Number} • Est. Value: ${item.Project_Value}
Job Site Address: ${item.Job_Site_Address}
Open Trade Packages: ${item.Open_Trades}
Full Scope Description: ${item.Scope_Description}
Close Project Scope
`;
document.getElementById('modalContent').innerHTML = html;
document.getElementById('detailModal').classList.add('active');
}
function closeModal(e) {
document.getElementById('detailModal').classList.remove('active');
}
function downloadCSV() {
const csvContent = "data:text/csv;charset=utf-8," +
["Permit_Number,Issue_Date,General_Contractor,Direct_Phone,Estimating_Email,Project_Value,Job_Site_Address,Scope_Description,Open_Trades,Building_Type"]
.concat(data.map(r =>
`"${r.Permit_Number}","${r.Issue_Date}","${r.General_Contractor}","${r.Direct_Phone}","${r.Estimating_Email}","${r.Project_Value}","${r.Job_Site_Address}","${r.Scope_Description}","${r.Open_Trades}","${r.Building_Type}"`
)).join("\n");
const encodedUri = encodeURI(csvContent);
const link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "keryx_media_dallas_commercial_permits_freebie.csv");
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
async function handleFreeFeedSignup(e) {
e.preventDefault();
const input = document.getElementById('feedEmailInput');
const btn = document.getElementById('feedSubmitBtn');
const status = document.getElementById('feedStatusMsg');
const email = (input.value || '').trim();
if (!email) return;
btn.disabled = true;
btn.style.opacity = '0.7';
btn.innerHTML = 'Activating... ';
status.className = 'feed-status-msg';
status.innerText = '';
try {
const res = await fetch('/api/free-feed', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email: email, trade: currentTrade })
});
const json = await res.json();
if (res.ok && json.ok) {
status.className = 'feed-status-msg success';
status.innerHTML = '🎉 Feed activated! Instant CSV feed sent to your inbox. Starting download...';
input.value = '';
btn.innerHTML = '✓ Active! ';
setTimeout(downloadCSV, 1000);
} else {
status.className = 'feed-status-msg error';
status.innerText = json.error || 'Failed to activate. Please try again.';
btn.disabled = false;
btn.style.opacity = '1';
btn.innerHTML = 'Get Free Daily Feed ';
}
} catch (err) {
status.className = 'feed-status-msg success';
status.innerText = '⚡ Downloading today\'s daily feed CSV...';
downloadCSV();
btn.disabled = false;
btn.style.opacity = '1';
btn.innerHTML = 'Get Free Daily Feed ';
}
}
/* =========================================================
Sticky Lead Bar Handlers & Interaction
========================================================= */
function initStickyLeadBar() {
const bar = document.getElementById('stickyLeadBar');
if (!bar) return;
if (sessionStorage.getItem('keryx_slb_dismissed') === '1') return;
let shown = false;
const showBar = () => {
if (shown) return;
shown = true;
bar.classList.add('visible');
};
// 1. Scroll-depth trigger (after 280px of scrolling)
window.addEventListener('scroll', () => {
if (window.scrollY > 280) showBar();
}, { passive: true });
// 2. Exit-intent trigger
document.addEventListener('mouseleave', (e) => {
if (e.clientY <= 20) showBar();
});
// 3. Ambient fallback timer (show after 6 seconds)
setTimeout(showBar, 6000);
}
function dismissStickyBar() {
const bar = document.getElementById('stickyLeadBar');
if (bar) {
bar.classList.remove('visible');
sessionStorage.setItem('keryx_slb_dismissed', '1');
}
}
async function handleStickyFeedSignup(e) {
e.preventDefault();
const input = document.getElementById('stickyEmailInput');
const btn = document.getElementById('stickySubmitBtn');
const status = document.getElementById('stickyStatusMsg');
const email = (input ? input.value : '').trim();
if (!email) return;
btn.disabled = true;
btn.style.opacity = '0.7';
const originalHtml = btn.innerHTML;
btn.innerHTML = 'Activating... ';
try {
const res = await fetch('/api/free-feed', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email: email, trade: currentTrade })
});
const json = await res.json().catch(() => ({}));
if (res.ok && json.ok) {
if (status) {
status.className = 'slb-status active success';
status.innerText = '✓ Feed activated! Sent to inbox.';
}
btn.innerHTML = '✓ Feed Active! ';
input.value = '';
downloadCSV();
setTimeout(() => {
dismissStickyBar();
}, 3500);
} else {
if (status) {
status.className = 'slb-status active error';
status.innerText = json.error || 'Activation failed. Please try again.';
}
btn.disabled = false;
btn.style.opacity = '1';
btn.innerHTML = originalHtml;
}
} catch (err) {
if (status) {
status.className = 'slb-status active success';
status.innerText = '⚡ Downloading CSV dataset...';
}
downloadCSV();
btn.disabled = false;
btn.style.opacity = '1';
btn.innerHTML = originalHtml;
setTimeout(() => {
dismissStickyBar();
}, 3500);
}
}
// Initial render
filterTable();
initStickyLeadBar();