{"id":61,"date":"2026-03-26T13:18:46","date_gmt":"2026-03-26T07:48:46","guid":{"rendered":"https:\/\/www.oneclickai.in\/?page_id=61"},"modified":"2026-03-26T13:41:35","modified_gmt":"2026-03-26T08:11:35","slug":"data-scraper","status":"publish","type":"page","link":"https:\/\/www.oneclickai.in\/index.php\/data-scraper\/","title":{"rendered":"Data Scraper"},"content":{"rendered":"\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>LinkedIn Job Post Contact Extractor<\/title>\n    <style>\n        :root {\n            --primary: #0a66c2;\n            --primary-dark: #074d99;\n            --secondary: #333;\n            --light: #f5f7f9;\n            --success: #28a745;\n            --warning: #ffc107;\n            --danger: #dc3545;\n            --border-radius: 8px;\n            --box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n            --transition: all 0.3s ease;\n        }\n        \n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n        \n        body {\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n            line-height: 1.6;\n            color: #333;\n            background-color: #f8f9fa;\n            padding: 20px;\n            max-width: 1200px;\n            margin: 0 auto;\n        }\n        \n        header {\n            text-align: center;\n            margin-bottom: 30px;\n            padding: 20px 0;\n        }\n        \n        h1 {\n            font-size: 2.5rem;\n            color: var(--primary);\n            margin-bottom: 10px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            gap: 12px;\n        }\n        \n        h1 svg {\n            width: 40px;\n            height: 40px;\n        }\n        \n        .subtitle {\n            font-size: 1.2rem;\n            color: #666;\n            max-width: 700px;\n            margin: 0 auto 20px;\n        }\n        \n        .container {\n            display: flex;\n            flex-direction: column;\n            gap: 25px;\n        }\n        \n        .input-section {\n            background: white;\n            padding: 25px;\n            border-radius: var(--border-radius);\n            box-shadow: var(--box-shadow);\n        }\n        \n        .input-section h2 {\n            margin-bottom: 15px;\n            color: var(--secondary);\n            display: flex;\n            align-items: center;\n            gap: 10px;\n        }\n        \n        .input-section h2 svg {\n            width: 24px;\n            height: 24px;\n            color: var(--primary);\n        }\n        \n        textarea {\n            width: 100%;\n            height: 150px;\n            padding: 15px;\n            border: 1px solid #ddd;\n            border-radius: var(--border-radius);\n            font-family: inherit;\n            font-size: 1rem;\n            margin: 10px 0;\n            resize: vertical;\n            transition: var(--transition);\n        }\n        \n        textarea:focus {\n            border-color: var(--primary);\n            box-shadow: 0 0 0 3px rgba(10, 102, 194, 0.2);\n            outline: none;\n        }\n        \n        .instructions {\n            background-color: var(--light);\n            padding: 15px;\n            border-radius: var(--border-radius);\n            margin: 15px 0;\n            font-size: 0.95rem;\n        }\n        \n        .instructions ol {\n            padding-left: 20px;\n            margin-top: 8px;\n        }\n        \n        .instructions li {\n            margin-bottom: 5px;\n        }\n        \n        .btn {\n            background: var(--primary);\n            color: white;\n            border: none;\n            padding: 12px 24px;\n            font-size: 1rem;\n            border-radius: var(--border-radius);\n            cursor: pointer;\n            transition: var(--transition);\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n            font-weight: 600;\n            box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n        }\n        \n        .btn:hover {\n            background: var(--primary-dark);\n            transform: translateY(-1px);\n            box-shadow: 0 4px 8px rgba(0,0,0,0.15);\n        }\n        \n        .btn:active {\n            transform: translateY(0);\n        }\n        \n        .btn-export {\n            background: #28a745;\n        }\n        \n        .btn-export:hover {\n            background: #218838;\n        }\n        \n        .btn-warning {\n            background: var(--warning);\n            color: #212529;\n        }\n        \n        .btn-warning:hover {\n            background: #e0a800;\n        }\n        \n        .btn-container {\n            display: flex;\n            gap: 10px;\n            margin-top: 15px;\n            flex-wrap: wrap;\n        }\n        \n        .result-section {\n            background: white;\n            border-radius: var(--border-radius);\n            box-shadow: var(--box-shadow);\n            padding: 25px;\n            display: none;\n        }\n        \n        .result-section.visible {\n            display: block;\n            animation: fadeIn 0.4s ease;\n        }\n        \n        @keyframes fadeIn {\n            from { opacity: 0; transform: translateY(10px); }\n            to { opacity: 1; transform: translateY(0); }\n        }\n        \n        .result-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 20px;\n            padding-bottom: 15px;\n            border-bottom: 1px solid #eee;\n        }\n        \n        .no-data {\n            text-align: center;\n            padding: 40px 20px;\n            color: var(--danger);\n            font-size: 1.2rem;\n            display: none;\n        }\n        \n        .no-data.visible {\n            display: block;\n            animation: fadeIn 0.4s ease;\n        }\n        \n        .no-data svg {\n            width: 60px;\n            height: 60px;\n            margin-bottom: 15px;\n            color: var(--danger);\n        }\n        \n        table {\n            width: 100%;\n            border-collapse: collapse;\n            margin: 20px 0;\n        }\n        \n        th, td {\n            padding: 14px 16px;\n            text-align: left;\n            border-bottom: 1px solid #eee;\n        }\n        \n        th {\n            background-color: var(--light);\n            font-weight: 600;\n            color: var(--secondary);\n            font-size: 0.95rem;\n        }\n        \n        tr:hover td {\n            background-color: #f9f9f9;\n        }\n        \n        .highlight {\n            background-color: #e6f7ff;\n            font-weight: 500;\n        }\n        \n        .export-section {\n            margin-top: 25px;\n            padding-top: 20px;\n            border-top: 1px solid #eee;\n        }\n        \n        .export-title {\n            margin-bottom: 15px;\n            display: flex;\n            align-items: center;\n            gap: 10px;\n        }\n        \n        .export-title svg {\n            width: 24px;\n            height: 24px;\n            color: var(--primary);\n        }\n        \n        .copy-success {\n            background-color: #d4edda;\n            color: #155724;\n            padding: 10px;\n            border-radius: var(--border-radius);\n            margin-top: 10px;\n            text-align: center;\n            display: none;\n        }\n        \n        .copy-success.visible {\n            display: block;\n            animation: fadeIn 0.3s ease;\n        }\n        \n        footer {\n            text-align: center;\n            margin-top: 40px;\n            padding-top: 20px;\n            border-top: 1px solid #eee;\n            color: #666;\n            font-size: 0.9rem;\n        }\n        \n        @media (max-width: 768px) {\n            body {\n                padding: 15px;\n            }\n            \n            .btn-container {\n                flex-direction: column;\n            }\n            \n            .btn {\n                width: 100%;\n                justify-content: center;\n            }\n            \n            th, td {\n                padding: 10px 8px;\n                font-size: 0.9rem;\n            }\n            \n            .container {\n                gap: 20px;\n            }\n            \n            .input-section, .result-section {\n                padding: 20px;\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <header>\n        <h1>\n            <svg viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                <path fill=\"#0a66c2\" d=\"M20.5 2h-17C2.675 2 2 2.675 2 3.5v17c0 .825.675 1.5 1.5 1.5h17c.825 0 1.5-.675 1.5-1.5v-17c0-.825-.675-1.5-1.5-1.5zM8.5 19H5.5v-6h3v6zm-1.5-7.5h-1v-3h1v3zm-4 4.5H5.5v-6H3v6zm12.5-1.5h-3v-2h3v2zm1.5-3.5h-3v-1c0-.828.337-1.5 1.5-1.5s1.5.672 1.5 1.5v1zm-1.5 2.5h-3v-2h3v2zm-4.5-7.5H5.5v6h3v-6zm-1.5 4.5h-1v-3h1v3z\"\/>\n            <\/svg>\n            LinkedIn Job Post Contact Extractor\n        <\/h1>\n        <p class=\"subtitle\">Extract contact information from LinkedIn job posts. 100% client-side processing &#8211; no data leaves your browser.<\/p>\n    <\/header>\n    \n    <div class=\"container\">\n        <section class=\"input-section\">\n            <h2>\n                <svg viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path fill=\"currentColor\" d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-5 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z\"\/>\n                <\/svg>\n                Paste Job Post Text\n            <\/h2>\n            <p>Copy the text from a LinkedIn job post, then paste it below:<\/p>\n            \n            <div class=\"instructions\">\n                <p><strong>How to use:<\/strong><\/p>\n                <ol>\n                    <li>Open a LinkedIn job post<\/li>\n                    <li>Select and copy the entire job description text (including contact details)<\/li>\n                    <li>Paste the text into the box below<\/li>\n                    <li>Click &#8220;Extract Contact Information&#8221;<\/li>\n                <\/ol>\n                <p><strong>Note:<\/strong> This tool processes text only &#8211; no URLs or direct scraping.<\/p>\n            <\/div>\n            \n            <textarea id=\"jobPostText\" placeholder=\"Paste the raw text from a LinkedIn job post here... For example:&#10;&#10;Senior Software Engineer&#10;Tech Innovations Inc.&#10;San Francisco, CA (Remote)&#10;&#10;We are looking for a talented engineer...&#10;&#10;Contact: John Smith&#10;Email: john.smith@techinnovations.com&#10;WhatsApp: +1 (415) 555-0199&#10;Apply now!\"><\/textarea>\n            \n            <div class=\"btn-container\">\n                <button id=\"extractBtn\" class=\"btn\">\n                    <svg viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                        <path fill=\"white\" d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-8 14H7v-2h4v2zm0-4H7v-2h4v2zm0-4H7V7h4v2zm6 8h-4v-2h4v2zm0-4h-4v-2h4v2zm0-4h-4V7h4v2z\"\/>\n                    <\/svg>\n                    Extract Contact Information\n                <\/button>\n                <button id=\"sampleBtn\" class=\"btn btn-warning\">\n                    <svg viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                        <path fill=\"currentColor\" d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-5 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z\"\/>\n                    <\/svg>\n                    Try Sample Data\n                <\/button>\n            <\/div>\n        <\/section>\n        \n        <section id=\"noDataSection\" class=\"no-data\">\n            <svg viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                <path fill=\"currentColor\" d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"\/>\n            <\/svg>\n            <p>No contact information found in the provided text.<\/p>\n            <p>Please verify you&#8217;ve pasted a complete job post with contact details, or try another post.<\/p>\n        <\/section>\n        \n        <section id=\"resultSection\" class=\"result-section\">\n            <div class=\"result-header\">\n                <h2>\n                    <svg viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                        <path fill=\"currentColor\" d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-5 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z\"\/>\n                    <\/svg>\n                    Extracted Contact Information\n                <\/h2>\n                <button id=\"copyTableBtn\" class=\"btn\">\n                    <svg viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                        <path fill=\"white\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/>\n                    <\/svg>\n                    Select All &#038; Copy\n                <\/button>\n            <\/div>\n            \n            <div class=\"table-container\">\n                <table id=\"resultTable\">\n                    <thead>\n                        <tr>\n                            <th>Recruiter \/ Contact Name<\/th>\n                            <th>Job Title<\/th>\n                            <th>Email Address<\/th>\n                            <th>Phone \/ WhatsApp<\/th>\n                            <th>Company Name<\/th>\n                            <th>Location<\/th>\n                        <\/tr>\n                    <\/thead>\n                    <tbody>\n                        <tr>\n                            <td id=\"recruiterName\">John Smith<\/td>\n                            <td id=\"jobTitle\">Senior Software Engineer<\/td>\n                            <td id=\"email\" class=\"highlight\">john.smith@techinnovations.com<\/td>\n                            <td id=\"phone\" class=\"highlight\">+1 (415) 555-0199 (WhatsApp)<\/td>\n                            <td id=\"companyName\">Tech Innovations Inc.<\/td>\n                            <td id=\"location\">San Francisco, CA (Remote)<\/td>\n                        <\/tr>\n                    <\/tbody>\n                <\/table>\n            <\/div>\n            \n            <div class=\"export-section\">\n                <h3 class=\"export-title\">\n                    <svg viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                        <path fill=\"currentColor\" d=\"M19 7v4h-3v-4H8v4H5V7H1V5h22v2h-4zm-2 12H7V9h10v10zm-8-2h6v-2H9v2zm0-4h6v-2H9v2zm0-4h6V7H9v2z\"\/>\n                    <\/svg>\n                    Export Options\n                <\/h3>\n                <div class=\"btn-container\">\n                    <button id=\"copyClipboardBtn\" class=\"btn\">\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path fill=\"white\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/>\n                        <\/svg>\n                        Copy to Clipboard\n                    <\/button>\n                    <button id=\"exportCsvBtn\" class=\"btn btn-export\">\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path fill=\"white\" d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-8 14H7v-2h4v2zm0-4H7v-2h4v2zm0-4H7V7h4v2zm6 8h-4v-2h4v2zm0-4h-4v-2h4v2zm0-4h-4V7h4v2z\"\/>\n                        <\/svg>\n                        Export as CSV\n                    <\/button>\n                    <button id=\"exportExcelBtn\" class=\"btn btn-export\">\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path fill=\"white\" d=\"M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11z\"\/>\n                        <\/svg>\n                        Export as Excel\n                    <\/button>\n                <\/div>\n                <div id=\"copySuccess\" class=\"copy-success\">\n                    Contact information successfully copied to clipboard!\n                <\/div>\n            <\/div>\n        <\/section>\n    <\/div>\n    \n    <footer>\n        <p>LinkedIn Job Post Contact Extractor &copy; 2026 | 100% Client-Side Processing<\/p>\n    <\/footer>\n    \n    <script>\n        document.addEventListener('DOMContentLoaded', function() {\n            const extractBtn = document.getElementById('extractBtn');\n            const sampleBtn = document.getElementById('sampleBtn');\n            const copyTableBtn = document.getElementById('copyTableBtn');\n            const copyClipboardBtn = document.getElementById('copyClipboardBtn');\n            const exportCsvBtn = document.getElementById('exportCsvBtn');\n            const exportExcelBtn = document.getElementById('exportExcelBtn');\n            const jobPostText = document.getElementById('jobPostText');\n            const resultSection = document.getElementById('resultSection');\n            const noDataSection = document.getElementById('noDataSection');\n            const copySuccess = document.getElementById('copySuccess');\n            \n            \/\/ Sample job post text\n            const sampleText = `Senior Software Engineer\nTech Innovations Inc.\nSan Francisco, CA (Remote)\n\nWe are looking for a talented Senior Software Engineer to join our growing team. The ideal candidate will have 5+ years of experience in full-stack development.\n\nResponsibilities:\n- Design and implement scalable web applications\n- Collaborate with product managers and designers\n- Mentor junior engineers\n- Participate in code reviews and architecture discussions\n\nRequirements:\n- Bachelor's degree in Computer Science or related field\n- 5+ years of professional software development experience\n- Proficiency in JavaScript, React, and Node.js\n- Experience with cloud platforms (AWS, Azure, or GCP)\n\nContact: John Smith, Lead Recruiter\nEmail: john.smith@techinnovations.com\nWhatsApp: +1 (415) 555-0199\nPhone: +1 (415) 555-0175\n\nTech Innovations Inc. is an equal opportunity employer. We celebrate diversity and are committed to creating an inclusive environment for all employees.`;\n            \n            \/\/ Set sample text when button is clicked\n            sampleBtn.addEventListener('click', () => {\n                jobPostText.value = sampleText;\n            });\n            \n            \/\/ Main extraction function\n            extractBtn.addEventListener('click', () => {\n                const text = jobPostText.value.trim();\n                \n                if (!text) {\n                    alert('Please paste the job post text first.');\n                    return;\n                }\n                \n                \/\/ Hide previous results\n                resultSection.classList.remove('visible');\n                noDataSection.classList.remove('visible');\n                \n                \/\/ Extract information\n                const extractedData = extractContactInfo(text);\n                \n                \/\/ Show appropriate section based on results\n                if (extractedData.hasContactInfo) {\n                    \/\/ Populate the table with extracted data\n                    document.getElementById('recruiterName').textContent = extractedData.recruiterName || 'Not specified';\n                    document.getElementById('jobTitle').textContent = extractedData.jobTitle || 'Not specified';\n                    document.getElementById('email').textContent = extractedData.email || 'Not found';\n                    document.getElementById('email').className = extractedData.email ? 'highlight' : '';\n                    document.getElementById('phone').textContent = extractedData.phone || 'Not found';\n                    document.getElementById('phone').className = extractedData.phone ? 'highlight' : '';\n                    document.getElementById('companyName').textContent = extractedData.companyName || 'Not specified';\n                    document.getElementById('location').textContent = extractedData.location || 'Not specified';\n                    \n                    \/\/ Show results\n                    resultSection.classList.add('visible');\n                    noDataSection.classList.remove('visible');\n                } else {\n                    \/\/ Show no data message\n                    resultSection.classList.remove('visible');\n                    noDataSection.classList.add('visible');\n                }\n            });\n            \n            \/\/ Copy entire table data\n            copyTableBtn.addEventListener('click', () => {\n                const table = document.getElementById('resultTable');\n                const range = document.createRange();\n                range.selectNode(table);\n                window.getSelection().removeAllRanges();\n                window.getSelection().addRange(range);\n                document.execCommand('copy');\n                window.getSelection().removeAllRanges();\n                \n                \/\/ Show success message\n                showCopySuccess();\n            });\n            \n            \/\/ Copy formatted contact info to clipboard\n            copyClipboardBtn.addEventListener('click', () => {\n                const data = getFormattedContactInfo();\n                navigator.clipboard.writeText(data).then(() => {\n                    showCopySuccess();\n                });\n            });\n            \n            \/\/ Export as CSV\n            exportCsvBtn.addEventListener('click', () => {\n                const csvContent = generateCsv();\n                const blob = new Blob([csvContent], { type: 'text\/csv;charset=utf-8;' });\n                const url = URL.createObjectURL(blob);\n                const link = document.createElement('a');\n                link.setAttribute('href', url);\n                link.setAttribute('download', 'linkedin_contacts.csv');\n                link.style.visibility = 'hidden';\n                document.body.appendChild(link);\n                link.click();\n                document.body.removeChild(link);\n            });\n            \n            \/\/ Export as Excel (CSV format with .xls extension)\n            exportExcelBtn.addEventListener('click', () => {\n                const csvContent = generateCsv();\n                const blob = new Blob([csvContent], { type: 'application\/vnd.ms-excel;charset=utf-8;' });\n                const url = URL.createObjectURL(blob);\n                const link = document.createElement('a');\n                link.setAttribute('href', url);\n                link.setAttribute('download', 'linkedin_contacts.xls');\n                link.style.visibility = 'hidden';\n                document.body.appendChild(link);\n                link.click();\n                document.body.removeChild(link);\n            });\n            \n            \/\/ Helper function to show copy success message\n            function showCopySuccess() {\n                copySuccess.classList.add('visible');\n                setTimeout(() => {\n                    copySuccess.classList.remove('visible');\n                }, 3000);\n            }\n            \n            \/\/ Extract contact information from text\n            function extractContactInfo(text) {\n                \/\/ Initialize result object\n                const result = {\n                    recruiterName: '',\n                    jobTitle: '',\n                    email: '',\n                    phone: '',\n                    companyName: '',\n                    location: '',\n                    hasContactInfo: false\n                };\n                \n                \/\/ Split text into lines and filter empty lines\n                const lines = text.split('\\n')\n                    .map(line => line.trim())\n                    .filter(line => line.length > 0);\n                \n                \/\/ Extract job title (first line that doesn't look like contact info)\n                if (lines.length > 0) {\n                    \/\/ Skip lines that look like emails, phones, or contact labels\n                    const contactPatterns = [\/^(email|phone|whatsapp|contact|tel|mobile):?\/i, \/@\/, \/\\+?\\d[\\d\\s\\-\\(\\)]{7,}\/];\n                    for (let i = 0; i < Math.min(5, lines.length); i++) {\n                        if (!contactPatterns.some(pattern => pattern.test(lines[i]))) {\n                            result.jobTitle = lines[i];\n                            break;\n                        }\n                    }\n                }\n                \n                \/\/ Extract company name (look for lines after job title)\n                if (lines.length > 1) {\n                    \/\/ Common company indicators\n                    const companyIndicators = ['inc', 'llc', 'corp', 'ltd', 'co', 'company', 'technologies', 'solutions', 'systems'];\n                    for (let i = 1; i < Math.min(6, lines.length); i++) {\n                        const line = lines[i].toLowerCase();\n                        if (companyIndicators.some(ind => line.includes(ind)) && !line.match(\/\\d{5}\/) && !line.includes('remote')) {\n                            result.companyName = lines[i];\n                            break;\n                        }\n                    }\n                }\n                \n                \/\/ Extract location (look for city names, states, remote indicators)\n                const locationPatterns = [\n                    \/\\b(?:remote|hybrid|onsite)\\b\/i,\n                    \/\\b(?:new york|los angeles|chicago|san francisco|boston|seattle|austin|denver|portland|miami|atlanta|dallas|phoenix|philadelphia|san diego)\\b\/i,\n                    \/\\b(?:ca|ny|tx|wa|ma|il|ga|co|az|pa|fl|oh|mi|nc|va|wa|or|nj|md)\\b\/i,\n                    \/\\b\\d{5}\\b\/ \/\/ US zip codes\n                ];\n                \n                for (let i = 0; i < Math.min(8, lines.length); i++) {\n                    if (locationPatterns.some(pattern => pattern.test(lines[i]))) {\n                        result.location = lines[i];\n                        break;\n                    }\n                }\n                \n                \/\/ Extract email addresses\n                const emailRegex = \/\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b\/g;\n                const emails = text.match(emailRegex);\n                if (emails) {\n                    result.email = [...new Set(emails)].join(', ');\n                    result.hasContactInfo = true;\n                }\n                \n                \/\/ Extract phone numbers (including WhatsApp)\n                const phoneRegex = \/(\\+?\\d{1,3}[-.\\s]?)?\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}|\\b(?:WhatsApp|whatsapp|WA|Wa|wa)[\\s:]*([\\+]?[\\d\\s\\-\\(\\)]{7,})\/g;\n                const phones = [];\n                let match;\n                \n                while ((match = phoneRegex.exec(text)) !== null) {\n                    \/\/ Check if it's a WhatsApp number\n                    const isWhatsApp = \/WhatsApp|whatsapp|WA|Wa|wa\/.test(match[0]);\n                    let phoneNum = match[0];\n                    \n                    \/\/ Clean up the phone number\n                    if (isWhatsApp) {\n                        \/\/ Extract just the number part if it's WhatsApp\n                        const numMatch = match[0].match(\/[\\+]?[\\d\\s\\-\\(\\)]{7,}\/);\n                        if (numMatch) {\n                            phoneNum = `${numMatch[0].trim()} (WhatsApp)`;\n                        }\n                    } else {\n                        \/\/ Clean regular phone numbers\n                        phoneNum = phoneNum.replace(\/(WhatsApp|whatsapp|WA|Wa|wa)[\\s:]*\/i, '').trim();\n                    }\n                    \n                    \/\/ Validate phone number has enough digits\n                    const digits = phoneNum.replace(\/\\D\/g, '');\n                    if (digits.length >= 7 && digits.length <= 15) {\n                        phones.push(phoneNum);\n                    }\n                }\n                \n                \/\/ Remove duplicates and format\n                if (phones.length > 0) {\n                    const uniquePhones = [...new Set(phones)];\n                    result.phone = uniquePhones.join(', ');\n                    result.hasContactInfo = true;\n                }\n                \n                \/\/ Extract recruiter name (look for \"Contact: Name\" pattern)\n                const contactMatch = text.match(\/(?:contact|recruiter|hiring manager)[:\\s]+([A-Z][a-z]+(?:\\s[A-Z][a-z]+)+)\/i);\n                if (contactMatch && contactMatch[1]) {\n                    result.recruiterName = contactMatch[1];\n                }\n                \n                \/\/ If we didn't find recruiter name but have company name, use that as fallback\n                if (!result.recruiterName && result.companyName) {\n                    result.recruiterName = result.companyName;\n                }\n                \n                return result;\n            }\n            \n            \/\/ Get formatted contact information for copying\n            function getFormattedContactInfo() {\n                return `Recruiter \/ Contact Name: ${document.getElementById('recruiterName').textContent}\nJob Title: ${document.getElementById('jobTitle').textContent}\nEmail Address: ${document.getElementById('email').textContent}\nPhone \/ WhatsApp: ${document.getElementById('phone').textContent}\nCompany Name: ${document.getElementById('companyName').textContent}\nLocation: ${document.getElementById('location').textContent}`;\n            }\n            \n            \/\/ Generate CSV content\n            function generateCsv() {\n                const headers = ['Recruiter \/ Contact Name', 'Job Title', 'Email Address', 'Phone \/ WhatsApp', 'Company Name', 'Location'];\n                const data = [\n                    document.getElementById('recruiterName').textContent,\n                    document.getElementById('jobTitle').textContent,\n                    document.getElementById('email').textContent,\n                    document.getElementById('phone').textContent,\n                    document.getElementById('companyName').textContent,\n                    document.getElementById('location').textContent\n                ];\n                \n                \/\/ Escape CSV values\n                const escapeCsv = (value) => {\n                    if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n                        return `\"${value.replace(\/\"\/g, '\"\"')}\"`;\n                    }\n                    return value;\n                };\n                \n                const csvRows = [\n                    headers.map(escapeCsv).join(','),\n                    data.map(escapeCsv).join(',')\n                ];\n                \n                return csvRows.join('\\n');\n            }\n            \n            \/\/ Initialize with sample data hidden\n            jobPostText.value = '';\n        });\n    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>LinkedIn Job Post Contact Extractor LinkedIn Job Post Contact Extractor Extract contact information from LinkedIn job posts. 100% client-side processing [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"disabled","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-61","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.oneclickai.in\/index.php\/wp-json\/wp\/v2\/pages\/61","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.oneclickai.in\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.oneclickai.in\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.oneclickai.in\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.oneclickai.in\/index.php\/wp-json\/wp\/v2\/comments?post=61"}],"version-history":[{"count":0,"href":"https:\/\/www.oneclickai.in\/index.php\/wp-json\/wp\/v2\/pages\/61\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.oneclickai.in\/index.php\/wp-json\/wp\/v2\/media?parent=61"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}