Connect your Bubble app to LinkedIn's API to enable Apply with LinkedIn functionality on your job board. This tutorial covers OAuth2 setup via the API Connector, fetching user profile data, and creating a seamless apply flow that pulls name, email, and profile picture from LinkedIn automatically.
Overview: Integrating LinkedIn for Job Postings in Bubble
If you are building a job board or recruitment platform in Bubble, LinkedIn integration lets users apply with their profile and pulls professional data automatically. This tutorial walks through creating a LinkedIn developer app, configuring OAuth2, and building a one-click application flow.
Prerequisites
- A Bubble app with the API Connector plugin installed
- A LinkedIn Developer account at developer.linkedin.com
- A LinkedIn App created with correct permissions
- Basic understanding of Bubble workflows and the API Connector
Step-by-step guide
Create a LinkedIn App in the developer portal
Create a LinkedIn App in the developer portal
Go to developer.linkedin.com and sign in. Click Create App. Fill in the app name, your company's LinkedIn page, and a logo. Once created, go to the Auth tab and note the Client ID and Client Secret. Add your Bubble redirect URL: https://yourapp.bubbleapps.io/api/1.1/oauth_redirect. Under Products, request access to Sign In with LinkedIn using OpenID Connect.
Pro tip: LinkedIn API access is restricted. Most apps only get basic profile data (name, email, picture). Job posting APIs require a partnership agreement.
Expected result: A LinkedIn App with Client ID, Client Secret, and the correct redirect URL configured.
Configure OAuth2 in the API Connector
Configure OAuth2 in the API Connector
In your Bubble editor, go to Plugins, then API Connector. Add a new API called LinkedIn API. Set Authentication to OAuth2 User-Agent Flow. Enter your Client ID and Client Secret. Set Authorization URL to https://www.linkedin.com/oauth/v2/authorization, Access Token URL to https://www.linkedin.com/oauth/v2/accessToken, and Scope to openid profile email.
Expected result: The LinkedIn API is configured with OAuth2 authentication ready for user login.
Add a Sign in with LinkedIn button
Add a Sign in with LinkedIn button
On your login or application page, add a Button labeled Sign in with LinkedIn styled with LinkedIn's brand blue (#0077B5). Create a workflow: When Button is clicked, use the Account action Signup/login with a social network and select LinkedIn API. This triggers the OAuth2 flow, redirecting users to LinkedIn to grant permission, then back to your app.
Expected result: Clicking the button redirects to LinkedIn login, and after authorization the user is logged into your Bubble app.
Fetch and store LinkedIn profile data
Fetch and store LinkedIn profile data
In the API Connector, add a new call called Get Profile. Set it as Data type, method GET, URL: https://api.linkedin.com/v2/userinfo. Use the LinkedIn API authentication. Initialize the call. Create a workflow triggered by User login status changes (when logged in). Add Get data from external API for the profile call, then Make changes to Current User to save the linkedin_name, linkedin_email, and linkedin_picture fields.
Expected result: The user's LinkedIn name, email, and profile picture are saved to their User record.
Build the Apply with LinkedIn flow
Build the Apply with LinkedIn flow
On your job listing page, add an Apply with LinkedIn button. Create a workflow that creates a new Application record with fields for job, applicant (Current User), linkedin_profile_url, applied_date, and status (using an Option Set: Applied, Reviewed, Accepted, Rejected). Show a confirmation popup on success. Add an Only when condition to check the user is logged in via LinkedIn before allowing the action.
Expected result: Users can apply to jobs with one click and their LinkedIn data is attached to the application.
Complete working example
1{2 "api_name": "LinkedIn API",3 "authentication": "OAuth2 User-Agent Flow",4 "client_id": "YOUR_CLIENT_ID",5 "client_secret": "YOUR_CLIENT_SECRET",6 "authorization_url": "https://www.linkedin.com/oauth/v2/authorization",7 "access_token_url": "https://www.linkedin.com/oauth/v2/accessToken",8 "scope": "openid profile email",9 "redirect_url": "https://yourapp.bubbleapps.io/api/1.1/oauth_redirect",10 "calls": [11 {12 "name": "Get Profile",13 "use_as": "Data",14 "method": "GET",15 "url": "https://api.linkedin.com/v2/userinfo",16 "headers": {17 "Authorization": "Bearer [access_token]"18 },19 "response_sample": {20 "sub": "abc123",21 "name": "Jane Smith",22 "given_name": "Jane",23 "family_name": "Smith",24 "picture": "https://media.licdn.com/photo.jpg",25 "email": "jane@example.com",26 "email_verified": true27 }28 }29 ]30}Common mistakes when integrating LinkedIn job posting in Bubble
Why it's a problem: Using the wrong redirect URL in LinkedIn settings
How to avoid: Use exactly: https://yourapp.bubbleapps.io/api/1.1/oauth_redirect with your actual app name.
Why it's a problem: Expecting access to LinkedIn Job Posting API
How to avoid: Create your own Job data type and let employers post manually. Use LinkedIn for authentication and profile data only.
Why it's a problem: Not requesting the correct OAuth scopes
How to avoid: Set scope to openid profile email and ensure these are enabled in your LinkedIn App's Products tab.
Best practices
- Use LinkedIn's official brand colors and logo guidelines for the sign-in button
- Store the LinkedIn access token securely and never expose it in frontend elements
- Request only the OAuth scopes you actually need
- Handle the case where a user denies LinkedIn permissions with an error message
- Cache profile data in your User data type to avoid repeated API calls
- Test the full OAuth flow in development before publishing
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I'm building a job board in Bubble.io and want to add Sign in with LinkedIn and Apply with LinkedIn functionality. Walk me through the LinkedIn OAuth2 setup, fetching profile data, and one-click application flow.
Add LinkedIn OAuth2 login to my app using the API Connector. Configure OAuth2 User-Agent Flow, add a Sign in with LinkedIn button, and create a workflow that fetches profile data after login.
Frequently asked questions
Is the LinkedIn Job Posting API available to all developers?
No. It is restricted to approved partners. Most Bubble apps can only use Sign In with LinkedIn for authentication and basic profile data.
Can I pull a user's full LinkedIn resume?
No. The basic product only provides name, email, and profile picture. Full profile data requires partnership approval from LinkedIn.
How do I handle users who do not have LinkedIn?
Offer alternative login methods (email/password, Google OAuth) alongside LinkedIn. Make LinkedIn optional for the application flow.
Does the LinkedIn token expire?
Yes, after 60 days. Bubble's OAuth2 implementation handles refresh automatically, but inactive users may need to re-authorize.
Can I post jobs to LinkedIn from my Bubble app?
Direct posting requires partnership access. As an alternative, generate a LinkedIn share URL that lets employers share job listings to their feed.
Can RapidDev help build a LinkedIn-integrated recruitment platform?
Yes. RapidDev can help build advanced recruitment features including LinkedIn integration, resume parsing, candidate pipelines, and automated job matching.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation